/ Hex Artifact Content
Login

Artifact c4fc60e18ec234d88f47f59f89f294f2af2436ea:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d  OOK(DB)   ((DB)-
0d20: 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
0d30: 61 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61  ack||(DB)->xUpda
0d40: 74 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73  teCallback).#els
0d50: 65 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55  e.# define HAS_U
0d60: 50 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20  PDATE_HOOK(DB)  
0d70: 28 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61  ((DB)->xUpdateCa
0d80: 6c 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a  llback).#endif..
0d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67  /*.** The next g
0da0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69  lobal variable i
0db0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61  s incremented ea
0dc0: 63 68 20 74 69 6d 65 20 74 68 65 20 4f 50 5f 46  ch time the OP_F
0dd0: 6f 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  ound opcode.** i
0de0: 73 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73  s executed. This
0df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
0e00: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
0e10: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  the foreign key.
0e20: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70  ** operation imp
0e30: 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f  lemented using O
0e40: 50 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f  P_FkIsZero is wo
0e50: 72 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69  rking. This vari
0e60: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
0e70: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
0e80: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
0e90: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ea0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
0eb0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0ec0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0ed0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75  .int sqlite3_fou
0ee0: 6e 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  nd_count = 0;.#e
0ef0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f00: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f10: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f30: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f40: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0f50: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0f60: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0f70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0f80: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0f90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fa0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
0fb0: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
0fc0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
0fd0: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
0fe0: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
0ff0: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1000: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  endif../*.** Inv
1020: 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f 76  oke the VDBE cov
1030: 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20  erage callback, 
1040: 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63 6b  if that callback
1050: 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
1060: 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  is.** feature is
1070: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20 73   used for test s
1080: 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e 20  uite validation 
1090: 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f  only and does no
10a0: 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70  t appear an.** p
10b0: 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 73  roduction builds
10c0: 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20  ..**.** M is an 
10d0: 69 6e 74 65 67 65 72 2c 20 32 20 6f 72 20 33 2c  integer, 2 or 3,
10e0: 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68 6f   that indices ho
10f0: 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  w many different
1100: 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72 61   ways the.** bra
1110: 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74 20  nch can go.  It 
1120: 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20 22  is usually 2.  "
1130: 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63 74  I" is the direct
1140: 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 2a  ion the branch.*
1150: 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73  * goes.  0 means
1160: 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20   falls through. 
1170: 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68 20   1 means branch 
1180: 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61  is taken.  2 mea
1190: 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64  ns the.** second
11a0: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72 61   alternative bra
11b0: 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a  nch is taken..**
11c0: 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20 69 73 20  .** iSrcLine is 
11d0: 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
11e0: 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68 65 20 5f  line (from the _
11f0: 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74  _LINE__ macro) t
1200: 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  hat.** generated
1210: 20 74 68 65 20 56 44 42 45 20 69 6e 73 74 72 75   the VDBE instru
1220: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73  ction.  This ins
1230: 74 72 75 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73  trumentation ass
1240: 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a  umes that all.**
1250: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 69 73 20   source code is 
1260: 69 6e 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  in a single file
1270: 20 28 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69   (the amalgamati
1280: 6f 6e 29 2e 20 20 53 70 65 63 69 61 6c 20 76 61  on).  Special va
1290: 6c 75 65 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20  lues 1.** and 2 
12a0: 66 6f 72 20 74 68 65 20 69 53 72 63 4c 69 6e 65  for the iSrcLine
12b0: 20 70 61 72 61 6d 65 74 65 72 20 6d 65 61 6e 20   parameter mean 
12c0: 74 68 61 74 20 74 68 69 73 20 70 61 72 74 69 63  that this partic
12d0: 75 6c 61 72 20 62 72 61 6e 63 68 20 69 73 0a 2a  ular branch is.*
12e0: 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f  * always taken o
12f0: 72 20 6e 65 76 65 72 20 74 61 6b 65 6e 2c 20 72  r never taken, r
1300: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
1310: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1320: 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1330: 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65  E).# define Vdbe
1340: 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29  BranchTaken(I,M)
1350: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1370: 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72 61  I,M) vdbeTakeBra
1380: 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e  nch(pOp->iSrcLin
1390: 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63 20  e,I,M).  static 
13a0: 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72 61  void vdbeTakeBra
13b0: 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e 65  nch(int iSrcLine
13c0: 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20  , u8 I, u8 M){. 
13d0: 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65 3c     if( iSrcLine<
13e0: 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53 72  =2 && ALWAYS(iSr
13f0: 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20  cLine>0) ){.    
1400: 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a    M = iSrcLine;.
1410: 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1420: 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64 62  the truth of Vdb
1430: 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73 54  eCoverageAlwaysT
1440: 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20 20  aken() and .    
1450: 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61 67    ** VdbeCoverag
1460: 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f  eNeverTaken() */
1470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1480: 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20  M & I)==I );.   
1490: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
14a0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
14b0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
14c0: 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20 20  h==0 ) return;  
14d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
14e0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
14f0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
1500: 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  h(sqlite3GlobalC
1510: 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e 63  onfig.pVdbeBranc
1520: 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  hArg,.          
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 20 20 20 69 53 72 63              iSrc
1550: 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d  Line,I,M);.    }
1560: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  .  }.#endif../*.
1570: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1580: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1590: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
15a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
15b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
15c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
15d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
15e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
15f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1600: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1610: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1620: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1630: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1640: 50 2c 65 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20  P,enc,0)) \.    
1650: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
1660: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
1670: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
1680: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
1690: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
16a0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
16b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
16c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
16d0: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
16e0: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
16f0: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1700: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1710: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1720: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1730: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1740: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1750: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
1760: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
1770: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
1780: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
1790: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
17a0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
17b0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
17c0: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
17d0: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
17e0: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
17f0: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1800: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1810: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1820: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1830: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1840: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 77   into a string w
1850: 69 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c  ith P.z==P.zMall
1860: 6f 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  oc..*/.#define D
1870: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29  eephemeralize(P)
1880: 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e   \.   if( ((P)->
1890: 66 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29  flags&MEM_Ephem)
18a0: 21 3d 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20  !=0 \.       && 
18b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
18c0: 6b 65 57 72 69 74 65 61 62 6c 65 28 50 29 20 29  keWriteable(P) )
18d0: 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a  { goto no_mem;}.
18e0: 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
18f0: 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61  if the cursor wa
1900: 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
1910: 68 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72  he OP_OpenSorter
1920: 20 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66   opcode. */.#def
1930: 69 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29 20  ine isSorter(x) 
1940: 28 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d 30  ((x)->pSorter!=0
1950: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  )../*.** Allocat
1960: 65 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d  e VdbeCursor num
1970: 62 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72  ber iCur.  Retur
1980: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  n a pointer to i
1990: 74 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a  t.  Return NULL.
19a0: 2a 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74  ** if we run out
19b0: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73   of memory..*/.s
19c0: 74 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72  tatic VdbeCursor
19d0: 20 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72   *allocateCursor
19e0: 28 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20  (.  Vdbe *p,    
19f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a00: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
1a10: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20   */.  int iCur, 
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1a30: 6e 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20  ndex of the new 
1a40: 56 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20  VdbeCursor */.  
1a50: 69 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20  int nField,     
1a60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a70: 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1a80: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1a90: 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20  */.  int iDb,   
1aa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1ab0: 74 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f  tabase the curso
1ac0: 72 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72  r belongs to, or
1ad0: 20 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42   -1 */.  int isB
1ae0: 74 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f  treeCursor     /
1af0: 2a 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65  * True for B-Tre
1b00: 65 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73  e.  False for ps
1b10: 65 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74  eudo-table or vt
1b20: 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69  ab */.){.  /* Fi
1b30: 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  nd the memory ce
1b40: 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ll that will be 
1b50: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1b60: 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79  e blob of memory
1b70: 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66  .  ** required f
1b80: 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73  or this VdbeCurs
1b90: 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74  or structure. It
1ba0: 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74   is convenient t
1bb0: 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64  o use a .  ** vd
1bc0: 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  be memory cell t
1bd0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d  o manage the mem
1be0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
1bf0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20  equired for a.  
1c00: 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  ** VdbeCursor st
1c10: 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20  ructure for the 
1c20: 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e  following reason
1c30: 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s:.  **.  **   *
1c40: 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f   Sometimes curso
1c50: 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73  r numbers are us
1c60: 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20  ed for a couple 
1c70: 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a  of different.  *
1c80: 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69  *     purposes i
1c90: 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d  n a vdbe program
1ca0: 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20  . The different 
1cb0: 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69  uses might requi
1cc0: 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66  re.  **     diff
1cd0: 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f  erent sized allo
1ce0: 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20  cations. Memory 
1cf0: 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72  cells provide gr
1d00: 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20  owable.  **     
1d10: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a  allocations..  *
1d20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20  *.  **   * When 
1d30: 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d  using ENABLE_MEM
1d40: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20  ORY_MANAGEMENT, 
1d50: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66  memory cell buff
1d60: 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20  ers can.  **    
1d70: 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79   be freed lazily
1d80: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33   via the sqlite3
1d90: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1da0: 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a  ) API. This.  **
1db0: 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74       minimizes t
1dc0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c  he number of mal
1dd0: 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62  loc calls made b
1de0: 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20  y the system..  
1df0: 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63  **.  ** Memory c
1e00: 65 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73  ells for cursors
1e10: 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61   are allocated a
1e20: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
1e30: 20 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70   address.  ** sp
1e40: 61 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c  ace. Memory cell
1e50: 20 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65   (p->nMem) corre
1e60: 73 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72  sponds to cursor
1e70: 20 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20   0. Space for.  
1e80: 2a 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d  ** cursor 1 is m
1e90: 61 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79  anaged by memory
1ea0: 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31   cell (p->nMem-1
1eb0: 29 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d  ), etc..  */.  M
1ec0: 65 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  em *pMem = &p->a
1ed0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72  Mem[p->nMem-iCur
1ee0: 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ];..  int nByte;
1ef0: 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f00: 43 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20  Cx = 0;.  nByte 
1f10: 3d 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28  = .      ROUND8(
1f20: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
1f30: 72 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75  r)) + 2*sizeof(u
1f40: 33 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20  32)*nField + .  
1f50: 20 20 20 20 28 69 73 42 74 72 65 65 43 75 72 73      (isBtreeCurs
1f60: 6f 72 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43  or?sqlite3BtreeC
1f70: 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a  ursorSize():0);.
1f80: 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c  .  assert( iCur<
1f90: 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fa0: 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  if( p->apCsr[iCu
1fb0: 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  r] ){.    sqlite
1fc0: 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1fd0: 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  p, p->apCsr[iCur
1fe0: 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72  ]);.    p->apCsr
1ff0: 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a  [iCur] = 0;.  }.
2000: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
2010: 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43  =sqlite3VdbeMemC
2020: 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d  learAndResize(pM
2030: 65 6d 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20  em, nByte) ){.  
2040: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
2050: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
2060: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
2070: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
2080: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
2090: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
20a0: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
20b0: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
20c0: 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e 61 4f  eld;.    pCx->aO
20d0: 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e 61 54  ffset = &pCx->aT
20e0: 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20  ype[nField];.   
20f0: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
2100: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
2110: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
2120: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
2130: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
2140: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
2150: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
2160: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
2170: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2180: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2190: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
21a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
21b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21c0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21d0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21e0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21f0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2200: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2220: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2230: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2240: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2250: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2260: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2270: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2280: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2290: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
22a0: 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lone..**.** If t
22b0: 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20 66 6c  he bTryForInt fl
22c0: 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  ag is true, then
22d0: 20 65 78 74 72 61 20 65 66 66 6f 72 74 20 69 73   extra effort is
22e0: 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a 2a 2a   made to give.**
22f0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
2300: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53 74 72  esentation.  Str
2310: 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b 20 6c  ings that look l
2320: 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  ike floating poi
2330: 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62 75 74  nt.** values but
2340: 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f 20 66   which have no f
2350: 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e  ractional compon
2360: 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20 27 34  ent (example: '4
2370: 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c 20 68  8.00').** will h
2380: 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20 72 65  ave a MEM_Int re
2390: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77 68 65  presentation whe
23a0: 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  n bTryForInt is 
23b0: 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62  true..**.** If b
23c0: 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66 61 6c  TryForInt is fal
23d0: 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68 65 20  se, then if the 
23e0: 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63 6f 6e  input string con
23f0: 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61 6c 0a  tains a decimal.
2400: 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78 70 6f  ** point or expo
2410: 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69 6f 6e  nential notation
2420: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
2430: 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c 20 65  only MEM_Real, e
2440: 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72 65 20  ven.** if there 
2450: 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e 74 65  is an exact inte
2460: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2470: 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e 74 69  on of the quanti
2480: 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ty..*/.static vo
2490: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
24a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
24b0: 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72 49 6e  c, int bTryForIn
24c0: 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61  t){.  double rVa
24d0: 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61 6c 75  lue;.  i64 iValu
24e0: 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20 70 52  e;.  u8 enc = pR
24f0: 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73 65 72  ec->enc;.  asser
2500: 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  t( (pRec->flags 
2510: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49  & (MEM_Str|MEM_I
2520: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d  nt|MEM_Real))==M
2530: 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66 28 20  EM_Str );.  if( 
2540: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65 63  sqlite3AtoF(pRec
2550: 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70 52  ->z, &rValue, pR
2560: 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29  ec->n, enc)==0 )
2570: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 30   return;.  if( 0
2580: 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  ==sqlite3Atoi64(
2590: 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65  pRec->z, &iValue
25a0: 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20  , pRec->n, enc) 
25b0: 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 69  ){.    pRec->u.i
25c0: 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 70   = iValue;.    p
25d0: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
25e0: 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  M_Int;.  }else{.
25f0: 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d 20      pRec->u.r = 
2600: 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63  rValue;.    pRec
2610: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52  ->flags |= MEM_R
2620: 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54 72  eal;.    if( bTr
2630: 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74 65  yForInt ) sqlite
2640: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
2650: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d 0a  nity(pRec);.  }.
2660: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
2670: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
2680: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
2690: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
26a0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
26b0: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
26c0: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
26d0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
26e0: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
26f0: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
2700: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2710: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
2720: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
2730: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2740: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
2750: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
2760: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
2770: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
2780: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
2790: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
27a0: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
27b0: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
27c0: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
27d0: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
27e0: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
27f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
2800: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
2810: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
2820: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
2830: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
2840: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
2850: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2860: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
2870: 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e  FF_BLOB:.**    N
2880: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
2890: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
28a0: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
28b0: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
28c0: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
28d0: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
28e0: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
28f0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
2900: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
2910: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
2920: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
2930: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
2940: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
2950: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
2960: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d    if( affinity>=
2970: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
2980: 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  IC ){.    assert
2990: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
29a0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c  TE_AFF_INTEGER |
29b0: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
29c0: 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20  TE_AFF_REAL.    
29d0: 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69           || affi
29e0: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
29f0: 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20  _NUMERIC );.    
2a00: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
2a10: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
2a20: 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65  {.      if( (pRe
2a30: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
2a40: 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
2a50: 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
2a60: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61  gs & MEM_Str ) a
2a70: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2a80: 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20  ity(pRec,1);.   
2a90: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2aa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
2ab0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
2ac0: 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  c);.      }.    
2ad0: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66  }.  }else if( af
2ae0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2af0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2b00: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2b10: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2b20: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2b30: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2b40: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2b50: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2b60: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2b70: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2b80: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2b90: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2ba0: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
2bb0: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
2bc0: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2bd0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2be0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2bf0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2c00: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
2c10: 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b  y(pRec, enc, 1);
2c20: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
2c30: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
2c40: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
2c50: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
2c60: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
2c70: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
2c80: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
2c90: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
2ca0: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
2cb0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
2cc0: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
2cd0: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
2ce0: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
2cf0: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
2d00: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
2d10: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
2d20: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
2d30: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
2d40: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
2d50: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
2d60: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
2d70: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
2d80: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2d90: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2da0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74  ue *pVal){.  int
2db0: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2dc0: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2dd0: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
2de0: 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20  SQLITE_TEXT ){. 
2df0: 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28     Mem *pMem = (
2e00: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61  Mem*)pVal;.    a
2e10: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2e20: 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20  ity(pMem, 0);.  
2e30: 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65    eType = sqlite
2e40: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2e50: 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  l);.  }.  return
2e60: 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   eType;.}../*.**
2e70: 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f   Exported versio
2e80: 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69  n of applyAffini
2e90: 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77  ty(). This one w
2ea0: 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f  orks on sqlite3_
2eb0: 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20  value*, .** not 
2ec0: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d  the internal Mem
2ed0: 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20  * type..*/.void 
2ee0: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2ef0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c  yAffinity(.  sql
2f00: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
2f10: 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  , .  u8 affinity
2f20: 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20  , .  u8 enc.){. 
2f30: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28   applyAffinity((
2f40: 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69  Mem *)pVal, affi
2f50: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f  nity, enc);.}../
2f60: 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e  *.** pMem curren
2f70: 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61  tly only holds a
2f80: 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72   string type (or
2f90: 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68   maybe a BLOB th
2fa0: 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74  at we can.** int
2fb0: 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69  erpret as a stri
2fc0: 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f  ng if we want to
2fd0: 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20  ).  Compute its 
2fe0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
2ff0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69   numeric type, i
3000: 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20  f has one.  Set 
3010: 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e  the pMem->u.r an
3020: 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c  d pMem->u.i fiel
3030: 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c  ds.** accordingl
3040: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3050: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
3060: 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54   computeNumericT
3070: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
3080: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
3090: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
30a0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
30b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
30c0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
30d0: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
30e0: 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
30f0: 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c  te3AtoF(pMem->z,
3100: 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65   &pMem->u.r, pMe
3110: 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29  m->n, pMem->enc)
3120: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
3130: 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  n 0;.  }.  if( s
3140: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65  qlite3Atoi64(pMe
3150: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69  m->z, &pMem->u.i
3160: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3170: 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  >enc)==SQLITE_OK
3180: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d   ){.    return M
3190: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65  EM_Int;.  }.  re
31a0: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d  turn MEM_Real;.}
31b0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
31c0: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
31d0: 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72  for pMem, either
31e0: 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f   MEM_Int or MEM_
31f0: 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a  Real or both or.
3200: 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a  ** none.  .**.**
3210: 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d   Unlike applyNum
3220: 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20  ericAffinity(), 
3230: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  this routine doe
3240: 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65  s not modify pMe
3250: 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74  m->flags..** But
3260: 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65   it does set pMe
3270: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
3280: 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65  >u.i appropriate
3290: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
32a0: 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  6 numericType(Me
32b0: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
32c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
32d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
32e0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70   ){.    return p
32f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3300: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b  M_Int|MEM_Real);
3310: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d  .  }.  if( pMem-
3320: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
3330: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20  r|MEM_Blob) ){. 
3340: 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74     return comput
3350: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65  eNumericType(pMe
3360: 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  m);.  }.  return
3370: 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51   0;.}..#ifdef SQ
3380: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
3390: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
33a0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
33b0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
33c0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
33d0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
33e0: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
33f0: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
3400: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3410: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
3420: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
3430: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
3440: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
3450: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
3460: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
3470: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
3480: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
3490: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
34a0: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
34b0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
34c0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
34d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
34e0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
34f0: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3500: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3510: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3520: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3530: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3540: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
3550: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3560: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3570: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3580: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3590: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
35a0: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
35b0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
35c0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
35d0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
35e0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
35f0: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
3600: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
3610: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3620: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
3630: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3640: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3650: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3660: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3670: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
3680: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
3690: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36a0: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
36b0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
36c0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
36d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
36e0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
36f0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3700: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
3710: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3720: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3730: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
3740: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3750: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3760: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3770: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
3780: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
3790: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
37a0: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
37b0: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
37c0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
37d0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
37e0: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
37f0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3800: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3810: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3820: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
3830: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
3840: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3850: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3860: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3870: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
3880: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3890: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
38a0: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
38b0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
38c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
38d0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
38e0: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
38f0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
3900: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3910: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
3920: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3930: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3940: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3950: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3960: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3970: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
3980: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3990: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
39a0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
39b0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
39c0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
39d0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
39e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
39f0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3a00: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3a10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3a20: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
3a30: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
3a40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a50: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3a60: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3a70: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
3a80: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
3a90: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
3aa0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
3ab0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
3ac0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
3ad0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3ae0: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3af0: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3b00: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3b10: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3b20: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3b30: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3b40: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3b50: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3b60: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3b70: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3b80: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
3b90: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
3ba0: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
3bb0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
3bc0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
3bd0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3be0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3bf0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3c00: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3c10: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3c20: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3c30: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3c40: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3c50: 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  rint(Mem *p){.  
3c60: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c70: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a  EM_Undefined ){.
3c80: 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64      printf(" und
3c90: 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73  efined");.  }els
3ca0: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3cb0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
3cc0: 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29   printf(" NULL")
3cd0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3cf0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
3d00: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
3d10: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3d20: 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69  si:%lld", p->u.i
3d30: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3d40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
3d50: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
3d60: 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e  " i:%lld", p->u.
3d70: 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  i);.#ifndef SQLI
3d80: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
3d90: 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69  _POINT.  }else i
3da0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3db0: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72  M_Real ){.    pr
3dc0: 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d  intf(" r:%g", p-
3dd0: 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  >u.r);.#endif.  
3de0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3df0: 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20  gs & MEM_RowSet 
3e00: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3e10: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
3e20: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3e30: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3e40: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3e50: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
3e60: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
3e70: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a  ", zBuf);.  }.}.
3e80: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69  static void regi
3e90: 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69 52  sterTrace(int iR
3ea0: 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70  eg, Mem *p){.  p
3eb0: 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20 3d  rintf("REG[%d] =
3ec0: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3ed0: 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a 20  TracePrint(p);. 
3ee0: 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d   printf("\n");.}
3ef0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3f00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3f10: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3f20: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64 62  TRACE(R,M) if(db
3f30: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 56  ->flags&SQLITE_V
3f40: 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74 65  dbeTrace)registe
3f50: 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73  rTrace(R,M).#els
3f60: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
3f70: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
3f80: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3f90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3fa0: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3fb0: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3fc0: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3fd0: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3fe0: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3ff0: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
4000: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
4010: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
4020: 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  if..#ifndef NDEB
4030: 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  UG./*.** This fu
4040: 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63  nction is only c
4050: 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
4060: 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78  n an assert() ex
4070: 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20  pression. It.** 
4080: 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20  checks that the 
4090: 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63  sqlite3.nTransac
40a0: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73  tion variable is
40b0: 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74   correctly set t
40c0: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
40d0: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
40e0: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75  on savepoints cu
40f0: 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a  rrently in the .
4100: 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73  ** linked list s
4110: 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74  tarting at sqlit
4120: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a  e3.pSavepoint..*
4130: 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a  * .** Usage:.**.
4140: 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63  **     assert( c
4150: 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
4160: 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61  nt(db) );.*/.sta
4170: 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76  tic int checkSav
4180: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69  epointCount(sqli
4190: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  te3 *db){.  int 
41a0: 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69  n = 0;.  Savepoi
41b0: 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64  nt *p;.  for(p=d
41c0: 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70  b->pSavepoint; p
41d0: 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b  ; p=p->pNext) n+
41e0: 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  +;.  assert( n==
41f0: 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20  (db->nSavepoint 
4200: 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  + db->isTransact
4210: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b  ionSavepoint) );
4220: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23  .  return 1;.}.#
4230: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
4240: 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65 72  urn the register
4250: 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74 65   of pOp->p2 afte
4260: 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69 6e  r first preparin
4270: 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f 76  g it to be.** ov
4280: 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20 61  erwritten with a
4290: 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
42a0: 0a 2a 2f 20 0a 73 74 61 74 69 63 20 4d 65 6d 20  .*/ .static Mem 
42b0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28  *out2Prerelease(
42c0: 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20  Vdbe *p, VdbeOp 
42d0: 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  *pOp){.  Mem *pO
42e0: 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ut;.  assert( pO
42f0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
4300: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
4310: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4320: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
4330: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
4340: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
4350: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
4360: 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
4370: 6d 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c 69  mic(pOut) ) sqli
4380: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4390: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
43a0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
43b0: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
43c0: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
43d0: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
43e0: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
43f0: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
4400: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
4410: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4420: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4430: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4440: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4450: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4460: 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f  E */.){.  Op *aO
4470: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
4480: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4490: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
44a0: 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20  pOp = aOp;      
44b0: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
44c0: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
44d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
44e0: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
44f0: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
4500: 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b  ).  Op *pOrigOp;
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4520: 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61  * Value of pOp a
4530: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
4540: 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a   loop */.#endif.
4550: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4560: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4570: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4580: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4590: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
45a0: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
45b0: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
45c0: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
45d0: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
45e0: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
45f0: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
4600: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
4610: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
4620: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
4630: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
4640: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
4650: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4660: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4670: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4680: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4690: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
46a0: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
46b0: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
46c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
46d0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
46e0: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
46f0: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
4700: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
4710: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4720: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4730: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4740: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
4750: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4760: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
4770: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4780: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4790: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
47a0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
47b0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
47c0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
47d0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
47e0: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
47f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4800: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4810: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4820: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4830: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4840: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4850: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4860: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
4870: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4880: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4890: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
48a0: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
48b0: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
48c0: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
48d0: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
48e0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
48f0: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4910: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4920: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4930: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4940: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4950: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4960: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4970: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4980: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4990: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
49a0: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
49b0: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
49c0: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
49d0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
49e0: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
49f0: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4a00: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4a10: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4a20: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4a30: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4a40: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4a50: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4a60: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4a70: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4a80: 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51  _OK || p->rc==SQ
4a90: 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61  LITE_BUSY );.  a
4aa0: 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
4ab0: 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e  der || p->readOn
4ac0: 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63  ly!=0 );.  p->rc
4ad0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
4ae0: 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20  p->iCurrentTime 
4af0: 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
4b00: 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a  ->explain==0 );.
4b10: 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20    p->pResultSet 
4b20: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
4b30: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
4b40: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  ;.  if( db->u1.i
4b50: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
4b60: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
4b70: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71  _interrupt;.  sq
4b80: 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
4b90: 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20  Sql(p);.#ifndef 
4ba0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4bb0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4bc0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
4bd0: 73 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  s ){.    assert(
4be0: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4bf0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4c00: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28 75  ogressLimit = (u
4c10: 6e 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75 6e  nsigned)p->aCoun
4c20: 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
4c30: 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a  TATUS_VM_STEP];.
4c40: 20 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65 73      if( nProgres
4c50: 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20  sLimit==0 ){.   
4c60: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4c70: 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  t = db->nProgres
4c80: 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  sOps;.    }else{
4c90: 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73  .      nProgress
4ca0: 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67 6e  Limit %= (unsign
4cb0: 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ed)db->nProgress
4cc0: 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  Ops;.    }.  }.#
4cd0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4ce0: 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69  ITE_DEBUG.  sqli
4cf0: 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
4d00: 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d  lloc();.  if( p-
4d10: 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d  >pc==0.   && (p-
4d20: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51  >db->flags & (SQ
4d30: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4d40: 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c  |SQLITE_VdbeEQP|
4d50: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4d60: 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69  ))!=0.  ){.    i
4d70: 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e  nt i;.    int on
4d80: 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69  ce = 1;.    sqli
4d90: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4da0: 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64  p);.    if( p->d
4db0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4dc0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b  E_VdbeListing ){
4dd0: 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56  .      printf("V
4de0: 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74  DBE Program List
4df0: 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ing:\n");.      
4e00: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4e10: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4e20: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e30: 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26  tOp(stdout, i, &
4e40: 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d  aOp[i]);.      }
4e50: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4e60: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4e70: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a  LITE_VdbeEQP ){.
4e80: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
4e90: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4ea0: 20 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69         if( aOp[i
4eb0: 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ].opcode==OP_Exp
4ec0: 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  lain ){.        
4ed0: 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69    if( once ) pri
4ee0: 6e 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20  ntf("VDBE Query 
4ef0: 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  Plan:\n");.     
4f00: 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c       printf("%s\
4f10: 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29  n", aOp[i].p4.z)
4f20: 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65  ;.          once
4f30: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
4f40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
4f50: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4f60: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4f70: 54 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28  Trace )  printf(
4f80: 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29  "VDBE Trace:\n")
4f90: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
4fa0: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4fb0: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4fc0: 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20  Op=&aOp[p->pc]; 
4fd0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70  rc==SQLITE_OK; p
4fe0: 4f 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Op++){.    asser
4ff0: 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70  t( pOp>=aOp && p
5000: 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29  Op<&aOp[p->nOp])
5010: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
5020: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
5030: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
5040: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
5050: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
5060: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
5070: 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b  f.    nVmStep++;
5080: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
5090: 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
50a0: 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d  TATUS.    if( p-
50b0: 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45  >anExec ) p->anE
50c0: 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f  xec[(int)(pOp-aO
50d0: 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  p)]++;.#endif.. 
50e0: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
50f0: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
5100: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
5110: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
5120: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5130: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
5140: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
5150: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71  race ){.      sq
5160: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5170: 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70  (stdout, (int)(p
5180: 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b  Op - aOp), pOp);
5190: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
51a0: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
51b0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
51c0: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
51d0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
51e0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
51f0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
5200: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
5210: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
5220: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
5230: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
5240: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5250: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
5260: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5270: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
5280: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5290: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
52a0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
52b0: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
52c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
52d0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61  endif..    /* Sa
52e0: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e  nity checking on
52f0: 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20   other operands 
5300: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5310: 5f 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  _DEBUG.    asser
5320: 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d  t( pOp->opflags=
5330: 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72  =sqlite3OpcodePr
5340: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
5350: 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 28  de] );.    if( (
5360: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5370: 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a  PFLG_IN1)!=0 ){.
5380: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5390: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
53a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
53b0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
53c0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
53d0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
53e0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
53f0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
5400: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5410: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5420: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
5430: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5440: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5450: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5460: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5470: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5480: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
5490: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
54a0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
54b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
54c0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
54d0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
54e0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
54f0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
5500: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p2]) );.      a
5510: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5520: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5530: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5540: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
5550: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5560: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5570: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5580: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5590: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
55a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
55b0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
55c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
55d0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
55e0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
55f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5600: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5610: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5620: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5630: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5640: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5650: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5660: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5670: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5680: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
5690: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
56a0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
56b0: 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T2)!=0 ){.      
56c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
56d0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
56e0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
56f0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5700: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5710: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5720: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5730: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5740: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5750: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5760: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5770: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5780: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5790: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
57a0: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
57b0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
57c0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
57d0: 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
57e0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
57f0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
5800: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
5810: 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20  LE).    pOrigOp 
5820: 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20  = pOp;.#endif.  
5830: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5840: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5870: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5880: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5890: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
58a0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
58b0: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
58c0: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
58d0: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
58e0: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
58f0: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5900: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5910: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5920: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5930: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5940: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5950: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5960: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5970: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5980: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5990: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
59a0: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
59b0: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
59c0: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
59d0: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
59e0: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
59f0: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5a00: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5a10: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5a20: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5a30: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5a40: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5a50: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5a60: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5a70: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5a80: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5a90: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5aa0: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5ab0: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5ac0: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5ad0: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5ae0: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5af0: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5b00: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5b10: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5b20: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5b30: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5b40: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5b50: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5b60: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5b70: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5b80: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5b90: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5ba0: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5bb0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5bc0: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5bd0: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5be0: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5bf0: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5c00: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5c10: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5c20: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5c30: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5c40: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5c50: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5c60: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5c70: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5c80: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5c90: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5ca0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5cb0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5cc0: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5cd0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5ce0: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5cf0: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5d00: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5d10: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5d20: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5d30: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5d40: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5d50: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5d60: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5d70: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5d80: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20  in2, in3, out2, 
5d90: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5da0: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5db0: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5dc0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5dd0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5de0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5df0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5e00: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5e10: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5e20: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5e30: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5e40: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5e50: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5e60: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5e70: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5e80: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5e90: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5ea0: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5eb0: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5ec0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5ed0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5ee0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5ef0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5f00: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5f10: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5f20: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5f30: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5f40: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
5f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
5fa0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
5fb0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
5fc0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
5fd0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
5fe0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
5ff0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6000: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6010: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6020: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6030: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6040: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
6050: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
6060: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
6070: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
6080: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
6090: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
60a0: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
60b0: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
60c0: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
60d0: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
60e0: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
60f0: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
6100: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
6110: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
6120: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
6130: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
6140: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
6150: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
6160: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
6170: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
6180: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6190: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  /.jump_to_p2_and
61a0: 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
61b0: 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61  rupt:.  pOp = &a
61c0: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
61d0: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
61e0: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
61f0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
6200: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
6210: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
6220: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
6230: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6240: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6250: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6260: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6270: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6280: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6290: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
62a0: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
62b0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
62c0: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
62d0: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
62e0: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
62f0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
6300: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
6310: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
6320: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
6330: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6340: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6350: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6360: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6370: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6380: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6390: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
63a0: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
63b0: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
63c0: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
63d0: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
63e0: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
63f0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
6400: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
6410: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
6420: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
6430: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6440: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6450: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6460: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6470: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6480: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6490: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
64a0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
64b0: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
64c0: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
64d0: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
64e0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
64f0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
6500: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
6510: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
6520: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
6530: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6540: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6550: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6560: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6570: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6580: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6590: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
65a0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
65b0: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
65c0: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
65d0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
65e0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
65f0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
6600: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
6610: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
6620: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
6630: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
6640: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6650: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6660: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6670: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6680: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6690: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
66a0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
66b0: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
66c0: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
66d0: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
66e0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
66f0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
6700: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
6710: 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  lt;.    }.  }.#e
6720: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
6730: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6740: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6750: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6760: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6770: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
6780: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6790: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
67a0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
67b0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
67c0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
67d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
67e0: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
67f0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
6800: 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ) );.  pIn1 = &a
6810: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6820: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
6830: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
6840: 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  );.  memAboutToC
6850: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
6860: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6870: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6880: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
6890: 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45  -aOp);.  REGISTE
68a0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
68b0: 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f   pIn1);..  /* Mo
68c0: 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f  st jump operatio
68d0: 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20  ns do a goto to 
68e0: 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64  this spot in ord
68f0: 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a  er to update.  *
6900: 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65  * the pOp pointe
6910: 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32  r. */.jump_to_p2
6920: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
6930: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62  Op->p2 - 1];.  b
6940: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6950: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
6960: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
6970: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6980: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6990: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
69a0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74  egister P1.  Aft
69b0: 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20  er.** the jump, 
69c0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
69d0: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
69e0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
69f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6a00: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
6a10: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6a20: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
6a30: 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
6a40: 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  );.  pOp = &aOp[
6a50: 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49  pIn1->u.i];.  pI
6a60: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6a70: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6a80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6a90: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20  : InitCoroutine 
6aa0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
6ab0: 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74  ** Set up regist
6ac0: 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  er P1 so that it
6ad0: 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74   will Yield to t
6ae0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20  he coroutine.** 
6af0: 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65  located at addre
6b00: 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ss P3..**.** If 
6b10: 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63  P2!=0 then the c
6b20: 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65  oroutine impleme
6b30: 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74  ntation immediat
6b40: 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74  ely follows.** t
6b50: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20  his opcode.  So 
6b60: 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f  jump over the co
6b70: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6b80: 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64  tation to.** add
6b90: 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ress P2..**.** S
6ba0: 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f  ee also: EndCoro
6bb0: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
6bc0: 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20  _InitCoroutine: 
6bd0: 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  {     /* jump */
6be0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6bf0: 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31  p1>0 &&  pOp->p1
6c00: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
6c10: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
6c20: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26  rt( pOp->p2>=0 &
6c30: 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
6c40: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6c50: 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p3>=0 && pOp-
6c60: 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p3<p->nOp );.  
6c70: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
6c80: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6c90: 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63   !VdbeMemDynamic
6ca0: 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74  (pOut) );.  pOut
6cb0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20  ->u.i = pOp->p3 
6cc0: 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  - 1;.  pOut->fla
6cd0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6ce0: 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f  if( pOp->p2 ) go
6cf0: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
6d00: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6d10: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6d20: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
6d30: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
6d40: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
6d50: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6d60: 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a  P1 is a Yield..*
6d70: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32  * Jump to the P2
6d80: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68   parameter of th
6d90: 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74  at Yield..** Aft
6da0: 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  er the jump, reg
6db0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6dc0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
6dd0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6de0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6df0: 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e  e OP_EndCoroutin
6e00: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
6e10: 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f  * in1 */.  VdbeO
6e20: 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49  p *pCaller;.  pI
6e30: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6e40: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6e50: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6e60: 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
6e70: 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26   pIn1->u.i>=0 &&
6e80: 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f   pIn1->u.i<p->nO
6e90: 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d  p );.  pCaller =
6ea0: 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d   &aOp[pIn1->u.i]
6eb0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6ec0: 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  ler->opcode==OP_
6ed0: 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72  Yield );.  asser
6ee0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d  t( pCaller->p2>=
6ef0: 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32  0 && pCaller->p2
6f00: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70  <p->nOp );.  pOp
6f10: 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d   = &aOp[pCaller-
6f20: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31  >p2 - 1];.  pIn1
6f30: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
6f40: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
6f50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6f60: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
6f70: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6f80: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6f90: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
6fa0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6fb0: 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68    This.** has th
6fc0: 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c  e effect of yiel
6fd0: 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74  ding to a corout
6fe0: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ine..**.** If th
6ff0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74  e coroutine that
7000: 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20   is launched by 
7010: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7020: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69   ends with.** Yi
7030: 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68  eld or Return th
7040: 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74  en continue to t
7050: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
7060: 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20  ion.  But if.** 
7070: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61  the coroutine la
7080: 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69  unched by this i
7090: 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20  nstruction ends 
70a0: 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75  with.** EndCorou
70b0: 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20  tine, then jump 
70c0: 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61  to P2 rather tha
70d0: 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74  n continuing wit
70e0: 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e  h the.** next in
70f0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
7100: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
7110: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7120: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
7130: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
7140: 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63  jump */.  int pc
7150: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
7160: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7170: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7180: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
7190: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
71a0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
71b0: 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e  cDest = (int)pIn
71c0: 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e  1->u.i;.  pIn1->
71d0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  u.i = (int)(pOp 
71e0: 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  - aOp);.  REGIST
71f0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
7200: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d  , pIn1);.  pOp =
7210: 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20   &aOp[pcDest];. 
7220: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7230: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
7240: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50  l  P1 P2 P3 P4 P
7250: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
7260: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7270: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7280: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7290: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
72a0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
72b0: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
72c0: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
72d0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
72e0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
72f0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
7300: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
7310: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
7320: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
7330: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7340: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7350: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7360: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7370: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7380: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7390: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
73a0: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
73b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
73c0: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
73d0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
73e0: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
73f0: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
7400: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
7410: 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69   P5.**.** Exit i
7420: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
7430: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
7440: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
7450: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7460: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
7470: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
7480: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
7490: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
74a0: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
74b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
74c0: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
74d0: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
74e0: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
74f0: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
7500: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
7510: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
7520: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
7530: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
7540: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
7550: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
7560: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
7570: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
7580: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
7590: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
75a0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
75b0: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
75c0: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
75d0: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
75e0: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
75f0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
7600: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
7610: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
7620: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
7630: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
7640: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
7650: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
7660: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
7670: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
7680: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
7690: 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65  P5 is a value be
76a0: 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69  tween 0 and 4, i
76b0: 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d  nclusive, that m
76c0: 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73  odifies the P4 s
76d0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tring..**.**    
76e0: 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a  0:  (no change).
76f0: 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55  **    1:  NOT NU
7700: 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69  LL contraint fai
7710: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a  led: P4.**    2:
7720: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
7730: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7740: 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63  *    3:  CHECK c
7750: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7760: 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46  : P4.**    4:  F
7770: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
7780: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7790: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
77a0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20  not zero and P4 
77b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76  is NULL, then ev
77c0: 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74  erything after t
77d0: 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69  he ":" is.** omi
77e0: 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  tted..**.** Ther
77f0: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
7800: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
7810: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
7820: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
7830: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
7840: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
7850: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
7860: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7870: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
7880: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
7890: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
78a0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
78b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
78c0: 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ype;.  const cha
78d0: 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64  r *zLogFmt;.  Vd
78e0: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
78f0: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
7900: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
7910: 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70   aOp);.  if( pOp
7920: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
7930: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
7940: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
7950: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
7960: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
7970: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
7980: 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d   */.    pFrame =
7990: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
79a0: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
79b0: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
79c0: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
79d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
79e0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
79f0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78  Change);.    pcx
7a00: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
7a10: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
7a20: 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69  e);.    lastRowi
7a30: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
7a40: 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  d;.    if( pOp->
7a50: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
7a60: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
7a70: 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65  ction pcx is the
7a80: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7a90: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7aa0: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7ab0: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
7ac0: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
7ad0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
7ae0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
7af0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
7b00: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
7b10: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7b20: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7b30: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7b40: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7b50: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7b60: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7b70: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7b80: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7b90: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7ba0: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7bb0: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78  m.  */.      pcx
7bc0: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70   = p->aOp[pcx].p
7bd0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7be0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7bf0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7c00: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
7c10: 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  pcx];.    break;
7c20: 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70  .  }.  p->rc = p
7c30: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72  Op->p1;.  p->err
7c40: 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70  orAction = (u8)p
7c50: 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20  Op->p2;.  p->pc 
7c60: 3d 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e  = pcx;.  if( p->
7c70: 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  rc ){.    if( pO
7c80: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73  p->p5 ){.      s
7c90: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
7ca0: 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b   * const azType[
7cb0: 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22  ] = { "NOT NULL"
7cc0: 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45  , "UNIQUE", "CHE
7cd0: 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CK",.           
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20    "FOREIGN KEY" 
7d10: 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  };.      assert(
7d20: 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70   pOp->p5>=1 && p
7d30: 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20  Op->p5<=4 );.   
7d40: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7d50: 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20  ->p5==1 );.     
7d60: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7d70: 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74  p5==2 );.      t
7d80: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7d90: 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==3 );.      tes
7da0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7db0: 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65  4 );.      zType
7dc0: 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70   = azType[pOp->p
7dd0: 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  5-1];.    }else{
7de0: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30  .      zType = 0
7df0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
7e00: 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20  rt( zType!=0 || 
7e10: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
7e20: 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61      zLogFmt = "a
7e30: 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25  bort at %d in [%
7e40: 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28  s]: %s";.    if(
7e50: 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70   zType && pOp->p
7e60: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  4.z ){.      sql
7e70: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
7e80: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7e90: 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79  failed: %s", zTy
7ea0: 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  pe, pOp->p4.z);.
7eb0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
7ec0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
7ee0: 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e  r(p, "%s", pOp->
7ef0: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
7f00: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
7f10: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20  dbeError(p, "%s 
7f20: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7f30: 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20  d", zType);.    
7f40: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
7f50: 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46  g(pOp->p1, zLogF
7f60: 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c  mt, pcx, p->zSql
7f70: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
7f80: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
7f90: 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
7fa0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7fb0: 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53  TE_BUSY || rc==S
7fc0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
7fd0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a  SQLITE_ERROR );.
7fe0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7ff0: 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e  _BUSY ){.    p->
8000: 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
8010: 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _BUSY;.  }else{.
8020: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8030: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
8040: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
8050: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a  E_CONSTRAINT );.
8060: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8070: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d  SQLITE_OK || db-
8080: 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30  >nDeferredCons>0
8090: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
80a0: 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  dImmCons>0 );.  
80b0: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
80c0: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
80d0: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
80e0: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
80f0: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
8100: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
8110: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8120: 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a  : r[P2]=P1.**.**
8130: 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65   The 32-bit inte
8140: 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20  ger value P1 is 
8150: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67  written into reg
8160: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
8170: 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20  e OP_Integer: { 
8180: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8190: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
81a0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
81b0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
81c0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
81d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
81e0: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
81f0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8200: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
8210: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8220: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
8230: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
8240: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
8250: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8260: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
8270: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
8280: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
8290: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
82a0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
82b0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
82c0: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
82d0: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
82e0: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
82f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8300: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
8310: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
8320: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
8330: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8340: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
8350: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
8360: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
8370: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
8380: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8390: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
83a0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
83b0: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
83c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
83d0: 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20  FLOAT, out2 */. 
83e0: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
83f0: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8400: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8410: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
8420: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
8430: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
8440: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72  ) );.  pOut->u.r
8450: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61   = *pOp->p4.pRea
8460: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  l;.  break;.}.#e
8470: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
8480: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
8490: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
84a0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a  : r[P2]='P4'.**.
84b0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
84c0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  a nul terminated
84d0: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54   UTF-8 string. T
84e0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
84f0: 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e  ansformed .** in
8500: 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f  to a String opco
8510: 64 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  de before it is 
8520: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
8530: 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75   first time.  Du
8540: 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61  ring.** this tra
8550: 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  nsformation, the
8560: 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e   length of strin
8570: 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64  g P4 is computed
8580: 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61   and stored.** a
8590: 73 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74  s the P1 paramet
85a0: 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  er..*/.case OP_S
85b0: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
85c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
85d0: 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a  STRING, out2 */.
85e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
85f0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8600: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8610: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70  e(p, pOp);.  pOp
8620: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
8630: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
8640: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
8650: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
8660: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8670: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
8680: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
8690: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
86a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
86b0: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
86c0: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
86d0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
86e0: 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20  TATIC);.    if( 
86f0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
8700: 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67  G ) goto too_big
8710: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
8720: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
8730: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
8740: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
8750: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
8760: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
8770: 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f  szMalloc>0 && pO
8780: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75  ut->zMalloc==pOu
8790: 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65  t->z );.    asse
87a0: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
87b0: 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20  ic(pOut)==0 );. 
87c0: 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f     pOut->szMallo
87d0: 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d  c = 0;.    pOut-
87e0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74  >flags |= MEM_St
87f0: 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f  atic;.    if( pO
8800: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
8810: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
8820: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
8830: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8840: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
8850: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
8860: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
8870: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
8880: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
8890: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  .  }.#endif.  if
88a0: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
88b0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
88c0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
88d0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
88e0: 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
88f0: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
8900: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
8910: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
8920: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
8930: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
8940: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8950: 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  ' (len=P1).**.**
8960: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
8970: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
8980: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
8990: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
89a0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  P2..**.** If P5!
89b0: 3d 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  =0 and the conte
89c0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
89d0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
89e0: 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20  n zero, then.** 
89f0: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
8a00: 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20  the register P2 
8a10: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
8a20: 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65  BLOB.  The conte
8a30: 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d  nt is.** the sam
8a40: 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
8a50: 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c  tes, it is merel
8a60: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
8a70: 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a   a BLOB instead.
8a80: 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20  ** of a string, 
8a90: 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65  as if it had bee
8aa0: 6e 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20  n CAST..*/.case 
8ab0: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
8ac0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8ad0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ae0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
8af0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8b00: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8b10: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
8b20: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
8b30: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
8b40: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
8b50: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
8b60: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
8b70: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
8b80: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
8b90: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ZE(pOut);.  if( 
8ba0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 61  pOp->p5 ){.    a
8bb0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
8bc0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8bd0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
8be0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
8bf0: 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  .    pIn3 = &aMe
8c00: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
8c10: 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
8c20: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
8c30: 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75  .    if( pIn3->u
8c40: 2e 69 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .i ) pOut->flags
8c50: 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f   = MEM_Blob|MEM_
8c60: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8c70: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8c80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
8c90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8ca0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
8cb0: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8cc0: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8cd0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8ce0: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8cf0: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
8d00: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
8d10: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8d20: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
8d30: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
8d40: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
8d50: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
8d60: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
8d70: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
8d80: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
8d90: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
8da0: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
8db0: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
8dc0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
8dd0: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
8de0: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
8df0: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
8e00: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
8e10: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
8e20: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
8e30: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
8e40: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
8e50: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
8e60: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8e70: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
8e80: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
8e90: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8ea0: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8eb0: 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d    cnt = pOp->p3-
8ec0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
8ed0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
8ee0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8ef0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
8f00: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
8f10: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
8f20: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
8f30: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68  : MEM_Null;.  wh
8f40: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
8f50: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
8f60: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
8f70: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
8f80: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
8f90: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
8fa0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
8fb0: 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b  Flag;.    cnt--;
8fc0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8fd0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
8fe0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
8ff0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
9000: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9010: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9020: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9030: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9040: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9050: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9060: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9070: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9080: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9090: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
90a0: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
90b0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
90c0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
90d0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
90e0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
90f0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
9100: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9110: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9120: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9130: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9140: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9150: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9160: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
9170: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
9180: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9190: 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  1];.  pOut->flag
91a0: 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73  s = (pOut->flags
91b0: 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f  |MEM_Null)&~MEM_
91c0: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
91d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
91e0: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
91f0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
9200: 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50   r[P2]=P4 (len=P
9210: 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  1).**.** P4 poin
9220: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
9230: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
9240: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
9250: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
9260: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
9270: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
9280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9290: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
92a0: 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45  Op->p1 <= SQLITE
92b0: 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20  _MAX_LENGTH );. 
92c0: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
92d0: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
92e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
92f0: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
9300: 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c  ->p4.z, pOp->p1,
9310: 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e   0, 0);.  pOut->
9320: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
9330: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
9340: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
9350: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9360: 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20  de: Variable P1 
9370: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
9380: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72  opsis: r[P2]=par
9390: 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a  ameter(P1,P4).**
93a0: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65  .** Transfer the
93b0: 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64   values of bound
93c0: 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e   parameter P1 in
93d0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  to register P2.*
93e0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61  *.** If the para
93f0: 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20  meter is named, 
9400: 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70  then its name ap
9410: 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20  pears in P4..** 
9420: 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20  The P4 value is 
9430: 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
9440: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
9450: 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ame()..*/.case O
9460: 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20  P_Variable: {   
9470: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9480: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
9490: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
94a0: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
94b0: 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
94c0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
94d0: 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b  ->p1<=p->nVar );
94e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
94f0: 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  p4.z==0 || pOp->
9500: 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70  p4.z==p->azVar[p
9510: 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70  Op->p1-1] );.  p
9520: 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70  Var = &p->aVar[p
9530: 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69  Op->p1 - 1];.  i
9540: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
9550: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
9560: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
9570: 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  g;.  }.  pOut = 
9580: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9590: 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65  , pOp);.  sqlite
95a0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
95b0: 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20  opy(pOut, pVar, 
95c0: 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55  MEM_Static);.  U
95d0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
95e0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
95f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9600: 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a   Move P1 P2 P3 *
9610: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9620: 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50   r[P2@P3]=r[P1@P
9630: 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68  3].**.** Move th
9640: 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72  e P3 values in r
9650: 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50  egister P1..P1+P
9660: 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  3-1 over into.**
9670: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
9680: 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65  2+P3-1.  Registe
9690: 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61  rs P1..P1+P3-1 a
96a0: 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69  re.** left holdi
96b0: 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69  ng a NULL.  It i
96c0: 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72  s an error for r
96d0: 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a  egister ranges.*
96e0: 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e  * P1..P1+P3-1 an
96f0: 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f  d P2..P2+P3-1 to
9700: 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73   overlap.  It is
9710: 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72   an error.** for
9720: 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74   P3 to be less t
9730: 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  han 1..*/.case O
9740: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20  P_Move: {.  int 
9750: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
9760: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
9770: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
9780: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
9790: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
97a0: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
97b0: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
97c0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
97d0: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
97e0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
97f0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
9800: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
9810: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
9820: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
9830: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
9840: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
9850: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
9860: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
9870: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f   &aMem[p2];.  do
9880: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
9890: 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  ut<=&aMem[(p->nM
98a0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20  em-p->nCursor)] 
98b0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
98c0: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  In1<=&aMem[(p->n
98d0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
98e0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
98f0: 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
9900: 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   );.    memAbout
9910: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
9920: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9930: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
9940: 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51  pIn1);.#ifdef SQ
9950: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
9960: 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  f( pOut->pScopyF
9970: 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26  rom>=&aMem[p1] &
9980: 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  & pOut->pScopyFr
9990: 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20  om<pOut ){.     
99a0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
99b0: 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70  m += pOp->p2 - p
99c0: 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
99d0: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
99e0: 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45  ze(pOut);.    RE
99f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
9a00: 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49  +, pOut);.    pI
9a10: 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b  n1++;.    pOut++
9a20: 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20  ;.  }while( --n 
9a30: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9a40: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50  * Opcode: Copy P
9a50: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
9a60: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33  ynopsis: r[P2@P3
9a70: 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a  +1]=r[P1@P3+1].*
9a80: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
9a90: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31   of registers P1
9aa0: 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67  ..P1+P3 into reg
9ab0: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
9ac0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
9ad0: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
9ae0: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
9af0: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
9b00: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
9b10: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
9b20: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
9b30: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
9b40: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
9b50: 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Copy: {.  int n;
9b60: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
9b70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9b80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
9b90: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
9ba0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
9bb0: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69  t!=pIn1 );.  whi
9bc0: 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c  le( 1 ){.    sql
9bd0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
9be0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
9bf0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
9c00: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
9c10: 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  e(pOut);.#ifdef 
9c20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
9c30: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9c40: 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  m = 0;.#endif.  
9c50: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
9c60: 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33  (pOp->p2+pOp->p3
9c70: 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69  -n, pOut);.    i
9c80: 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72  f( (n--)==0 ) br
9c90: 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  eak;.    pOut++;
9ca0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
9cb0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9cc0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
9cd0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
9ce0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
9cf0: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
9d00: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
9d10: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
9d20: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
9d30: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
9d40: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
9d50: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
9d60: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
9d70: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
9d80: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
9d90: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
9da0: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
9db0: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
9dc0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
9dd0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
9de0: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
9df0: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
9e00: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
9e10: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
9e20: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
9e30: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
9e40: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
9e50: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
9e60: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
9e70: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
9e80: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
9e90: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
9ea0: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
9eb0: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
9ec0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
9ed0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
9ee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9ef0: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
9f00: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9f10: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9f20: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
9f30: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
9f40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9f50: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
9f60: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
9f70: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9f80: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75  _DEBUG.  if( pOu
9f90: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30  t->pScopyFrom==0
9fa0: 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46   ) pOut->pScopyF
9fb0: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64  rom = pIn1;.#end
9fc0: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
9fd0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
9fe0: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
9ff0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75  ** Synopsis:  ou
a000: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
a010: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
a020: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
a030: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
a040: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
a050: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
a060: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
a070: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
a080: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
a090: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
a0a0: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
a0b0: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
a0c0: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
a0d0: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
a0e0: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
a0f0: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
a100: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
a110: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
a120: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
a130: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
a140: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
a150: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
a160: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
a170: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
a180: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
a190: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a1a0: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
a1b0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
a1c0: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
a1d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a1e0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
a1f0: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
a200: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
a210: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
a220: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
a230: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
a240: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
a250: 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26  ogressLimit.   &
a260: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
a270: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
a280: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
a290: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
a2a0: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64  UPT;.    goto vd
a2b0: 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20  be_error_halt;. 
a2c0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
a2d0: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
a2e0: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
a2f0: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
a300: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
a310: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
a320: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a330: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
a340: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
a350: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
a360: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
a370: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
a380: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
a390: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
a3a0: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
a3b0: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
a3c0: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
a3d0: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
a3e0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a3f0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
a400: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
a410: 6c 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  l );.    break;.
a420: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
a430: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
a440: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
a450: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
a460: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
a470: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
a480: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a490: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
a4a0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
a4b0: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
a4c0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a4d0: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
a4e0: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
a4f0: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
a500: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a510: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
a520: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
a530: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
a540: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
a550: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
a560: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a570: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
a580: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
a590: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
a5a0: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
a5b0: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
a5c0: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
a5d0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
a5e0: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
a5f0: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
a600: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
a610: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
a620: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a630: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
a640: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
a650: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
a660: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
a670: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
a680: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
a690: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
a6a0: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
a6b0: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
a6c0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
a6d0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
a6e0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a6f0: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
a700: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
a710: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
a720: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
a730: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
a740: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
a750: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
a760: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
a770: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
a780: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
a790: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
a7a0: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
a7b0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
a7c0: 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
a7d0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  !=SQLITE_OK) ){.
a7e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a7f0: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
a800: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
a810: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
a820: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
a830: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
a840: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
a850: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
a860: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
a870: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
a880: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
a890: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
a8a0: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
a8b0: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
a8c0: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
a8d0: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
a8e0: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
a8f0: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
a900: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a910: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
a920: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
a930: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
a940: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
a950: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
a960: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
a970: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
a980: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
a990: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
a9a0: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
a9b0: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
a9c0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
a9d0: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
a9e0: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
a9f0: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
aa00: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
aa10: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
aa20: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
aa30: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
aa40: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
aa50: 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  ;..  /* Return S
aa60: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
aa70: 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
aa80: 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20  Op - aOp) + 1;. 
aa90: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
aaa0: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
aab0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
aac0: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
aad0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
aae0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
aaf0: 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P1].**.** Add
ab00: 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67   the text in reg
ab10: 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68  ister P1 onto th
ab20: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78  e end of the tex
ab30: 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  t in.** register
ab40: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
ab50: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
ab60: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
ab70: 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20  ither the P1 or 
ab80: 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c  P2 text are NULL
ab90: 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c   then store NULL
aba0: 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20   in P3..**.**   
abb0: 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a  P3 = P2 || P1.**
abc0: 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
abd0: 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20  l for P1 and P3 
abe0: 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72  to be the same r
abf0: 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d  egister. Sometim
ac00: 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20  es,.** if P3 is 
ac10: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
ac20: 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70  r as P2, the imp
ac30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61  lementation is a
ac40: 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  ble.** to avoid 
ac50: 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63  a memcpy()..*/.c
ac60: 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b  ase OP_Concat: {
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ac80: 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c  me as TK_CONCAT,
ac90: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
aca0: 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a  */.  i64 nByte;.
acb0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
acc0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
acd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ace0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
acf0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
ad00: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
ad10: 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
ad20: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ad30: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
ad40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ad50: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
ad60: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
ad70: 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64    }.  if( Expand
ad80: 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78  Blob(pIn1) || Ex
ad90: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29  pandBlob(pIn2) )
ada0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
adb0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
adc0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72  encoding);.  Str
add0: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
ade0: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
adf0: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
ae00: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
ae10: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
ae20: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
ae30: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
ae40: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _big;.  }.  if( 
ae50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
ae60: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
ae70: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
ae80: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
ae90: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_mem;.  }.  Mem
aea0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
aeb0: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
aec0: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
aed0: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
aee0: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
aef0: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
af00: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
af10: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
af20: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
af30: 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20  ->z[nByte]=0;.  
af40: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d  pOut->z[nByte+1]
af50: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   = 0;.  pOut->fl
af60: 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
af70: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
af80: 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
af90: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
afa0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
afb0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
afc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
afd0: 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50  ode: Add P1 P2 P
afe0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
aff0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b  s:  r[P3]=r[P1]+
b000: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P2].**.** Add 
b010: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b020: 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
b030: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b040: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b050: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b060: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b070: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b080: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b090: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b0a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69  /* Opcode: Multi
b0b0: 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ply P1 P2 P3 * *
b0c0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
b0d0: 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d  [P3]=r[P1]*r[P2]
b0e0: 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70  .**.**.** Multip
b0f0: 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ly the value in 
b100: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b110: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b120: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b130: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b140: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b150: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b160: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b170: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b180: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75  */./* Opcode: Su
b190: 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20  btract P1 P2 P3 
b1a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b1b0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b    r[P3]=r[P2]-r[
b1c0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61  P1].**.** Subtra
b1d0: 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ct the value in 
b1e0: 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d  register P1 from
b1f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b200: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b210: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b220: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b230: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b240: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b250: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b260: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b270: 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20  Divide P1 P2 P3 
b280: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b290: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b    r[P3]=r[P2]/r[
b2a0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
b2b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b2c0: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
b2d0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b2e0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b2f0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b300: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
b310: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
b320: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
b330: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
b340: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
b350: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
b360: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
b370: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
b380: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b390: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
b3a0: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
b3b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
b3c0: 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d  [P3]=r[P2]%r[P1]
b3d0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  .**.** Compute t
b3e0: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74  he remainder aft
b3f0: 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73  er integer regis
b400: 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65  ter P2 is divide
b410: 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65  d by .** registe
b420: 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74  r P1 and store t
b430: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b440: 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66  ister P3. .** If
b450: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b460: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
b470: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
b480: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
b490: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
b4a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b4b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
b4c0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
b4d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b4e0: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
b4f0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b500: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
b510: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b520: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
b530: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
b540: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
b550: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
b560: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b570: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
b580: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b590: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
b5a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b5b0: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
b5c0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b5d0: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
b5e0: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
b5f0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
b600: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
b610: 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74  3 */.  char bInt
b620: 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65  int;   /* Starte
b630: 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74  d out as two int
b640: 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  eger operands */
b650: 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
b660: 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d     /* Combined M
b670: 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20  EM_* flags from 
b680: 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20  both inputs */. 
b690: 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20   u16 type1;     
b6a0: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
b6b0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b6c0: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b   */.  u16 type2;
b6d0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
b6e0: 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f   type of right o
b6f0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b700: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
b710: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b720: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b730: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
b740: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
b750: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
b760: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
b770: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
b780: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b790: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
b7a0: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
b7b0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
b7c0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
b7d0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
b7e0: 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20  p->p1];.  type1 
b7f0: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b800: 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
b810: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
b820: 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54  type2 = numericT
b830: 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ype(pIn2);.  pOu
b840: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
b850: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
b860: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
b870: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
b880: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
b890: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
b8a0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b8b0: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79  _null;.  if( (ty
b8c0: 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45  pe1 & type2 & ME
b8d0: 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
b8e0: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
b8f0: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
b900: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
b910: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
b920: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b930: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
b940: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
b950: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
b960: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
b970: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
b980: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
b990: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
b9a0: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
b9b0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
b9c0: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
b9d0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
b9e0: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
b9f0: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
ba00: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
ba10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
ba20: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
ba30: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
ba40: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
ba50: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
ba60: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
ba70: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
ba80: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
ba90: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
baa0: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
bab0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bac0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
bad0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
bae0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
baf0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bb00: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
bb10: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
bb20: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
bb30: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
bb40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
bb50: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
bb60: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
bb70: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
bb80: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
bb90: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
bba0: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
bbb0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
bbc0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
bbd0: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
bbe0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
bbf0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
bc00: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
bc10: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
bc20: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
bc30: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
bc40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bc50: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
bc60: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
bc70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bc80: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
bc90: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
bca0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bcb0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
bcc0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
bcd0: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
bce0: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
bcf0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
bd00: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
bd10: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
bd20: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
bd30: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
bd40: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
bd50: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
bd60: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
bd70: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
bd80: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
bd90: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
bda0: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
bdb0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
bdc0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bdd0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
bde0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
bdf0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
be00: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
be10: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
be20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
be30: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
be40: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
be50: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
be60: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
be70: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
be80: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
be90: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
bea0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
beb0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
bec0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bed0: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
bee0: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a  pOut->u.r = rB;.
bef0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bf00: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
bf10: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79  l);.    if( ((ty
bf20: 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52  pe1|type2)&MEM_R
bf30: 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74  eal)==0 && !bInt
bf40: 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
bf50: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
bf60: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
bf70: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
bf80: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
bf90: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bfa0: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
bfb0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
bfc0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
bfd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
bfe0: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
bff0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
c000: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
c010: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
c020: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
c030: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
c040: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
c050: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
c060: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
c070: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c080: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
c090: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
c0a0: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
c0b0: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
c0c0: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
c0d0: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
c0e0: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
c0f0: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
c100: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
c110: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
c120: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
c130: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
c140: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
c150: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
c160: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
c170: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
c180: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
c190: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
c1a0: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
c1b0: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
c1c0: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
c1d0: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
c1e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
c1f0: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
c200: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
c210: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
c220: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
c230: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
c240: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
c250: 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e  ** publicly.  On
c260: 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ly built-in func
c270: 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73  tions have acces
c280: 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72  s to this featur
c290: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  e..*/.case OP_Co
c2a0: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
c2b0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
c2c0: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
c2d0: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
c2e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c2f0: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
c300: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
c310: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
c320: 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f   Opcode: Functio
c330: 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
c340: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
c350: 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35  P3]=func(r[P2@P5
c360: 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  ]).**.** Invoke 
c370: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c380: 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P4 is a pointer
c390: 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73   to a Function s
c3a0: 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a  tructure that.**
c3b0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
c3c0: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61  ction) with P5 a
c3d0: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
c3e0: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
c3f0: 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  and.** successor
c400: 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  s.  The result o
c410: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
c420: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
c430: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69  ster P3..** Regi
c440: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
c450: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
c460: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
c470: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
c480: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
c490: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
c4a0: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
c4b0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
c4c0: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
c4d0: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
c4e0: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
c4f0: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
c500: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
c510: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
c520: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
c530: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
c540: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
c550: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
c560: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
c570: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
c580: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
c590: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
c5a0: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
c5b0: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
c5c0: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
c5d0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
c5e0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
c5f0: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
c600: 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65  See also: AggSte
c610: 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a  p and AggFinal.*
c620: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
c630: 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  on: {.  int i;. 
c640: 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71   Mem *pArg;.  sq
c650: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74  lite3_context ct
c660: 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  x;.  sqlite3_val
c670: 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e  ue **apVal;.  in
c680: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
c690: 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70  >p5;.  apVal = p
c6a0: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
c6b0: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
c6c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
c6d0: 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
c6e0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
c6f0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74  nCursor) );.  ct
c700: 78 2e 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70  x.pOut = &aMem[p
c710: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
c720: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 63  outToChange(p, c
c730: 74 78 2e 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73  tx.pOut);..  ass
c740: 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
c750: 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
c760: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
c770: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
c780: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
c790: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
c7a0: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
c7b0: 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d   );.  pArg = &aM
c7c0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66  em[pOp->p2];.  f
c7d0: 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
c7e0: 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61  , pArg++){.    a
c7f0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
c800: 64 28 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61  d(pArg) );.    a
c810: 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a  pVal[i] = pArg;.
c820: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
c830: 7a 65 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45  ze(pArg);.    RE
c840: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
c850: 2d 3e 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20  ->p2+i, pArg);. 
c860: 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
c870: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
c880: 4e 43 44 45 46 20 29 3b 0a 20 20 63 74 78 2e 70  NCDEF );.  ctx.p
c890: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
c8a0: 46 75 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70 20  Func;.  ctx.iOp 
c8b0: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
c8c0: 70 29 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20  p);.  ctx.pVdbe 
c8d0: 3d 20 70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = p;.  MemSetTyp
c8e0: 65 46 6c 61 67 28 63 74 78 2e 70 4f 75 74 2c 20  eFlag(ctx.pOut, 
c8f0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78  MEM_Null);.  ctx
c900: 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  .fErrorOrAux = 0
c910: 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ;.  db->lastRowi
c920: 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
c930: 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46   (*ctx.pFunc->xF
c940: 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  unc)(&ctx, n, ap
c950: 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  Val); /* IMP: R-
c960: 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
c970: 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d   lastRowid = db-
c980: 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20  >lastRowid;  /* 
c990: 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63  Remember rowid c
c9a0: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78  hanges made by x
c9b0: 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  Func */..  /* If
c9c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
c9d0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
c9e0: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
c9f0: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
ca00: 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a  .fErrorOrAux ){.
ca10: 20 20 20 20 69 66 28 20 63 74 78 2e 69 73 45 72      if( ctx.isEr
ca20: 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
ca30: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
ca40: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
ca50: 61 6c 75 65 5f 74 65 78 74 28 63 74 78 2e 70 4f  alue_text(ctx.pO
ca60: 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
ca70: 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
ca80: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
ca90: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
caa0: 28 70 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  (p, (int)(pOp - 
cab0: 61 4f 70 29 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  aOp), pOp->p1);.
cac0: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
cad0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
cae0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
caf0: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
cb00: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
cb10: 65 45 6e 63 6f 64 69 6e 67 28 63 74 78 2e 70 4f  eEncoding(ctx.pO
cb20: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
cb30: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
cb40: 4d 65 6d 54 6f 6f 42 69 67 28 63 74 78 2e 70 4f  MemTooBig(ctx.pO
cb50: 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ut) ){.    goto 
cb60: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
cb70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
cb80: 4f 70 2d 3e 70 33 2c 20 63 74 78 2e 70 4f 75 74  Op->p3, ctx.pOut
cb90: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
cba0: 42 4c 4f 42 53 49 5a 45 28 63 74 78 2e 70 4f 75  BLOBSIZE(ctx.pOu
cbb0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
cbc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e  /* Opcode: BitAn
cbd0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
cbe0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
cbf0: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
cc00: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
cc10: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
cc20: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
cc30: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
cc40: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
cc50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cc60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cc70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cc80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cc90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
cca0: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
ccb0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
ccc0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
ccd0: 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]|r[P2].**.** Ta
cce0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
ccf0: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
cd00: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cd10: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
cd20: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
cd30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
cd40: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
cd50: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
cd60: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
cd70: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
cd80: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
cd90: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
cda0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72    r[P3]=r[P2]<<r
cdb0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
cdc0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
cdd0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
cde0: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
cdf0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
ce00: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
ce10: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
ce20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
ce30: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
ce40: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
ce50: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
ce60: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
ce70: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ce80: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
ce90: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
cea0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
ceb0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
cec0: 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]>>r[P1].**.**
ced0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
cee0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
cef0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
cf00: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
cf10: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
cf20: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
cf30: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
cf40: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
cf50: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
cf60: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
cf70: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
cf80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
cf90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
cfa0: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cfc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
cfd0: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
cfe0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
cff0: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
d000: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d010: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
d020: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
d030: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d050: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
d060: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
d070: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
d080: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
d090: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d0a0: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
d0b0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
d0c0: 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b  64 iA;.  u64 uA;
d0d0: 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20  .  i64 iB;.  u8 
d0e0: 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  op;..  pIn1 = &a
d0f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d100: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
d110: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
d120: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
d130: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d140: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
d150: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
d160: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d170: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
d180: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
d190: 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64    iA = sqlite3Vd
d1a0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
d1b0: 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33  ;.  iB = sqlite3
d1c0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
d1d0: 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e  1);.  op = pOp->
d1e0: 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70  opcode;.  if( op
d1f0: 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20  ==OP_BitAnd ){. 
d200: 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d     iA &= iB;.  }
d210: 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  else if( op==OP_
d220: 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20  BitOr ){.    iA 
d230: 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  |= iB;.  }else i
d240: 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20  f( iB!=0 ){.    
d250: 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53  assert( op==OP_S
d260: 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d  hiftRight || op=
d270: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b  =OP_ShiftLeft );
d280: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66  ..    /* If shif
d290: 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69  ting by a negati
d2a0: 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74  ve amount, shift
d2b0: 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69   in the other di
d2c0: 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  rection */.    i
d2d0: 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20  f( iB<0 ){.     
d2e0: 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66   assert( OP_Shif
d2f0: 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74  tRight==OP_Shift
d300: 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20  Left+1 );.      
d310: 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c  op = 2*OP_ShiftL
d320: 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20  eft + 1 - op;.  
d330: 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34      iB = iB>(-64
d340: 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20  ) ? -iB : 64;.  
d350: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e    }..    if( iB>
d360: 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20  =64 ){.      iA 
d370: 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d  = (iA>=0 || op==
d380: 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20  OP_ShiftLeft) ? 
d390: 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73  0 : -1;.    }els
d3a0: 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  e{.      memcpy(
d3b0: 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66  &uA, &iA, sizeof
d3c0: 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (uA));.      if(
d3d0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
d3e0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20  t ){.        uA 
d3f0: 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65  <<= iB;.      }e
d400: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20  lse{.        uA 
d410: 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20  >>= iB;.        
d420: 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f  /* Sign-extend o
d430: 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20  n a right shift 
d440: 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75  of a negative nu
d450: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  mber */.        
d460: 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d  if( iA<0 ) uA |=
d470: 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66   ((((u64)0xfffff
d480: 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66  fff)<<32)|0xffff
d490: 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29  ffff) << (64-iB)
d4a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
d4b0: 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c  memcpy(&iA, &uA,
d4c0: 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20   sizeof(iA));.  
d4d0: 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
d4e0: 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53  u.i = iA;.  MemS
d4f0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
d500: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
d510: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d520: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
d530: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d540: 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b  s:  r[P1]=r[P1]+
d550: 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68  P2.** .** Add th
d560: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
d570: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d580: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
d590: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
d5a0: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
d5b0: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
d5c0: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
d5d0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
d5e0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
d5f0: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
d600: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d610: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d620: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
d630: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
d640: 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  , pIn1);.  sqlit
d650: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
d660: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
d670: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
d680: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
d690: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
d6a0: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
d6b0: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
d6c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d6d0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
d6e0: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
d6f0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
d700: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
d710: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
d720: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
d730: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
d740: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
d750: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
d760: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
d770: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
d780: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
d790: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
d7a0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
d7b0: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
d7c0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
d7d0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d7e0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d7f0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d800: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
d810: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d820: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
d830: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
d840: 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72  ing);.    VdbeBr
d850: 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d  anchTaken((pIn1-
d860: 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d  >flags&MEM_Int)=
d870: 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
d880: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d890: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
d8a0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
d8b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
d8c0: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
d8d0: 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  CH;.        goto
d8e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
d8f0: 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ror;.      }else
d900: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a  {.        goto j
d910: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
d920: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d   }.    }.  }.  M
d930: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
d940: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
d950: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
d960: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
d970: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
d980: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
d990: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
d9a0: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
d9b0: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
d9c0: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
d9d0: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
d9e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
d9f0: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
da00: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
da10: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
da20: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
da30: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
da40: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
da50: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
da60: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
da70: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
da80: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
da90: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
daa0: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
dab0: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
dac0: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
dad0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
dae0: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
daf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
db00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
db10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
db20: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
db30: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
db40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
db50: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
db60: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
db70: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
db80: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
db90: 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31   Opcode: Cast P1
dba0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
dbb0: 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
dbc0: 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72  r[P1]).**.** For
dbd0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
dbe0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
dbf0: 65 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e  e the type defin
dc00: 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a  ed by P2..** .**
dc10: 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c   <ul>.** <li val
dc20: 75 65 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a  ue="97"> TEXT.**
dc30: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e   <li value="98">
dc40: 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c   BLOB.** <li val
dc50: 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43  ue="99"> NUMERIC
dc60: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31  .** <li value="1
dc70: 30 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20  00"> INTEGER.** 
dc80: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e  <li value="101">
dc90: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
dca0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
dcb0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
dcc0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
dcd0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
dce0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
dcf0: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
dd00: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
dd10: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
dd20: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
dd30: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
dd40: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
dd50: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
dd60: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
dd70: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
dd80: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
dd90: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
dda0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
ddb0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
ddc0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
ddd0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
dde0: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
ddf0: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
de00: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
de10: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
de20: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
de30: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
de40: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
de50: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
de60: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
de70: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
de80: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
de90: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
dea0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
deb0: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
dec0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
ded0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
dee0: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
def0: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
df00: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
df10: 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20   if r[P1]<r[P3] 
df20: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f  goto P2.**.** Co
df30: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
df40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
df50: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
df60: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
df70: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
df80: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
df90: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
dfa0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
dfb0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
dfc0: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
dfd0: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
dfe0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
dff0: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
e000: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e010: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
e020: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
e030: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
e040: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
e050: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
e060: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
e070: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
e080: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
e090: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
e0a0: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
e0b0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
e0c0: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
e0d0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
e0e0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
e0f0: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
e100: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
e110: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
e120: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
e130: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
e140: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
e150: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
e160: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
e170: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
e180: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
e190: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
e1a0: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
e1b0: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
e1c0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e1d0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
e1e0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
e1f0: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
e200: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
e210: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
e220: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
e230: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
e240: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
e250: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
e260: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
e270: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
e280: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
e290: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
e2a0: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
e2b0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
e2c0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
e2d0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
e2e0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
e2f0: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
e300: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
e310: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
e320: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
e330: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
e340: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
e350: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
e360: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
e370: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
e380: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
e390: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
e3a0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
e3b0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
e3c0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
e3d0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
e3e0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
e3f0: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
e400: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
e410: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
e420: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
e430: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
e440: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
e450: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
e460: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
e470: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
e480: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
e490: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
e4a0: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
e4b0: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
e4c0: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
e4d0: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
e4e0: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
e4f0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
e500: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  f the SQLITE_NUL
e510: 4c 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69  LEQ bit is set i
e520: 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20  n P5, then NULL 
e530: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
e540: 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74  dered.** equal t
e550: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70  o one another, p
e560: 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65  rovided that the
e570: 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68  y do not have th
e580: 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a  eir MEM_Cleared.
e590: 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f  ** bit set..*/./
e5a0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
e5b0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e5c0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e5d0: 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]!=r[P3] goto P2
e5e0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e5f0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e600: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e610: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e620: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e630: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
e640: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e650: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
e660: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
e670: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
e680: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e690: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
e6a0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e6b0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e6c0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e6d0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e6e0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e6f0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e700: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e710: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e720: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e730: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e740: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
e750: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
e760: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
e770: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
e780: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
e790: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e7a0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e7b0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e7c0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e7d0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e7e0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e7f0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
e800: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
e810: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e820: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e830: 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ==r[P3] goto P2.
e840: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e850: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e860: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e870: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e880: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e890: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
e8a0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e8b0: 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53   are equal..** S
e8c0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e8d0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e8e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
e8f0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
e900: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
e910: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e920: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e930: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
e940: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
e950: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
e960: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
e970: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
e980: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
e990: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
e9a0: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
e9b0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e9c0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e9d0: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
e9e0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
e9f0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
ea00: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
ea10: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
ea20: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
ea30: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
ea40: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
ea50: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
ea60: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
ea70: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
ea80: 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33  : if r[P1]<=r[P3
ea90: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
eaa0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
eab0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
eac0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ead0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
eae0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
eaf0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
eb00: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
eb10: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
eb20: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
eb30: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
eb40: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
eb50: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
eb60: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
eb70: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
eb80: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
eb90: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72  psis: if r[P1]>r
eba0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
ebb0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
ebc0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
ebd0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
ebe0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
ebf0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
ec00: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
ec10: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
ec20: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
ec30: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
ec40: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
ec50: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
ec60: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
ec70: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
ec80: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
ec90: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
eca0: 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20  if r[P1]>=r[P3] 
ecb0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
ecc0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
ecd0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
ece0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
ecf0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
ed00: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
ed10: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
ed20: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
ed30: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
ed40: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
ed50: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ed60: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ed70: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ed80: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
ed90: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
eda0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
edb0: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
edc0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
edd0: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
ede0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
edf0: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
ee00: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ee10: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
ee20: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ee30: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
ee40: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
ee50: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
ee60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
ee70: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
ee80: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eea0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
eeb0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eec0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eee0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
eef0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ef00: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
ef10: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
ef20: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
ef30: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
ef40: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
ef50: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
ef60: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
ef70: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
ef80: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
ef90: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
efa0: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
efb0: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
efc0: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
efd0: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
efe0: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
eff0: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
f000: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
f010: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f020: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
f030: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
f040: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
f050: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
f060: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
f070: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
f080: 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
f090: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
f0a0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
f0b0: 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
f0c0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f0d0: 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
f0e0: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
f0f0: 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
f100: 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
f110: 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
f120: 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
f130: 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
f140: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
f150: 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
f160: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
f170: 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
f180: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
f190: 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
f1a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
f1b0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
f1c0: 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
f1d0: 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61  OP_Ne );.      a
f1e0: 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26  ssert( (flags1 &
f1f0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30   MEM_Cleared)==0
f200: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
f210: 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
f220: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d  ITE_JUMPIFNULL)=
f230: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
f240: 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c  (flags1&MEM_Null
f250: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
f260: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
f270: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
f280: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
f290: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
f2a0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
f2b0: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
f2c0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
f2d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
f2e0: 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 1;  /* Resul
f2f0: 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ts are not equal
f300: 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
f310: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
f320: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
f330: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
f340: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
f350: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
f360: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
f370: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
f380: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
f390: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
f3a0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
f3b0: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
f3c0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f3d0: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f3e0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
f3f0: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
f400: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
f410: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
f420: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f430: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
f440: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
f450: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
f460: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f470: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
f480: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
f490: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f4a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f4b0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
f4c0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
f4d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
f4e0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
f4f0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
f500: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
f510: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
f520: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
f530: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
f540: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
f550: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
f560: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
f570: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
f580: 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
f590: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn1->flags & (M
f5a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
f5b0: 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
f5c0: 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70  tr ){.        ap
f5d0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
f5e0: 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20  ty(pIn1,0);.    
f5f0: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70    }.      if( (p
f600: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In3->flags & (ME
f610: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
f620: 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
f630: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  r ){.        app
f640: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
f650: 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20  y(pIn3,0);.     
f660: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
f670: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
f680: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
f690: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
f6a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d  lags & MEM_Str)=
f6b0: 3d 30 20 26 26 20 28 70 49 6e 31 2d 3e 66 6c 61  =0 && (pIn1->fla
f6c0: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
f6d0: 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
f6e0: 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
f6f0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f700: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
f710: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f720: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
f730: 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
f740: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
f750: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
f760: 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
f770: 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
f780: 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
f790: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
f7a0: 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
f7b0: 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
f7c0: 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
f7d0: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
f7e0: 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
f7f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
f800: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
f810: 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  s & MEM_Str)==0 
f820: 26 26 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  && (pIn3->flags 
f830: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
f840: 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
f850: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
f860: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
f870: 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
f880: 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
f890: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
f8a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
f8b0: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
f8c0: 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e  fy(pIn3, encodin
f8d0: 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74  g, 1);.        t
f8e0: 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33  estcase( (flags3
f8f0: 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49  &MEM_Dyn) != (pI
f900: 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79  n3->flags&MEM_Dy
f910: 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c  n) );.        fl
f920: 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c  ags3 = (pIn3->fl
f930: 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d  ags & ~MEM_TypeM
f940: 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26  ask) | (flags3 &
f950: 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a   MEM_TypeMask);.
f960: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
f970: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
f980: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
f990: 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
f9a0: 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  ll==0 );.    if(
f9b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
f9c0: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
f9d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
f9e0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
f9f0: 0a 20 20 20 20 20 20 66 6c 61 67 73 31 20 26 3d  .      flags1 &=
fa00: 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20   ~MEM_Zero;.    
fa10: 7d 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e  }.    if( pIn3->
fa20: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
fa30: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
fa40: 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
fa50: 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ob(pIn3);.      
fa60: 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a  flags3 &= ~MEM_Z
fa70: 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ero;.    }.    i
fa80: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
fa90: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
faa0: 6d 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  m;.    res = sql
fab0: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
fac0: 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
fad0: 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  p4.pColl);.  }. 
fae0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
faf0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
fb00: 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d   OP_Eq:    res =
fb10: 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
fb20: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
fb30: 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Ne:    res = res
fb40: 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  !=0;     break;.
fb50: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20      case OP_Lt: 
fb60: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20     res = res<0; 
fb70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
fb80: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72  case OP_Le:    r
fb90: 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  es = res<=0;    
fba0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
fbb0: 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
fbc0: 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65   res>0;      bre
fbd0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
fbe0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73         res = res
fbf0: 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  >=0;     break;.
fc00: 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61    }..  /* Undo a
fc10: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
fc20: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
fc30: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
fc40: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
fc50: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
fc60: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
fc70: 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  == (flags1 & MEM
fc80: 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d  _Dyn) );.  pIn1-
fc90: 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b  >flags = flags1;
fca0: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33  .  assert( (pIn3
fcb0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
fcc0: 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20  n) == (flags3 & 
fcd0: 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49  MEM_Dyn) );.  pI
fce0: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n3->flags = flag
fcf0: 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  s3;..  if( pOp->
fd00: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
fd10: 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20  EP2 ){.    pOut 
fd20: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
fd30: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
fd40: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
fd50: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
fd60: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
fd70: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
fd80: 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47  i = res;.    REG
fd90: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
fda0: 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
fdb0: 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
fdc0: 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
fdd0: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
fde0: 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
fdf0: 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
fe00: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
fe10: 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
fe20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fe30: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
fe40: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
fe50: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
fe60: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
fe70: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
fe80: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
fe90: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
fea0: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
feb0: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
fec0: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
fed0: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
fee0: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
fef0: 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
ff00: 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
ff10: 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
ff20: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
ff30: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
ff40: 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
ff50: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
ff60: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
ff70: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
ff80: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
ff90: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
ffa0: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
ffb0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
ffc0: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
ffd0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
ffe0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fff0: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
10000 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
10010 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50  Synopsis: r[P1@P
10020 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a  3] <-> r[P2@P3].
10030 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
10040 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
10050 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
10060 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
10070 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
10080 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
10090 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
100a0 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
100b0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
100c0 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
100d0 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
100e0 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
100f0 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
10100 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
10110 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
10120 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
10130 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
10140 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
10150 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
10160 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
10170 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
10180 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
10190 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
101a0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
101b0 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
101c0 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
101d0 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
101e0 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
101f0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
10200 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
10210 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
10220 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
10230 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
10240 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
10250 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
10260 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
10270 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
10280 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
10290 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
102a0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
102b0 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
102c0 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
102d0 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
102e0 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
102f0 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
10300 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
10310 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
10320 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
10330 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
10340 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
10350 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
10360 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
10370 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
10380 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
10390 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
103a0 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
103b0 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
103c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
103d0 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
103e0 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
103f0 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
10400 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
10410 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
10420 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
10430 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
10440 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75  UTE)==0 ) aPermu
10450 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f  te = 0;.  n = pO
10460 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
10470 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
10480 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
10490 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
104a0 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
104b0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
104c0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
104d0 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  #if SQLITE_DEBUG
104e0 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
104f0 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
10500 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
10510 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
10520 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
10530 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
10540 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
10550 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
10560 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
10570 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
10580 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
10590 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  mx<=(p->nMem-p->
105a0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
105b0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
105c0 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
105d0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
105e0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
105f0 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
10600 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
10610 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10620 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
10630 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
10640 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
10650 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
10660 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
10670 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
10680 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
10690 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
106a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
106b0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
106c0 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
106d0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
106e0 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
106f0 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
10700 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
10710 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
10720 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
10730 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
10740 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
10750 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
10760 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
10770 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
10780 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
10790 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
107a0 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
107b0 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
107c0 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
107d0 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
107e0 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
107f0 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
10800 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
10810 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
10820 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a    aPermute = 0;.
10830 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10840 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
10850 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10860 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
10870 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
10880 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
10890 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
108a0 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
108b0 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
108c0 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
108d0 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
108e0 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
108f0 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
10900 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
10910 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
10920 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
10930 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
10940 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
10950 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
10960 3c 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  <0 ){.    VdbeBr
10970 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20  anchTaken(0,3); 
10980 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
10990 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65  p1 - 1];.  }else
109a0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
109b0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
109c0 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f  chTaken(1,3); pO
109d0 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
109e0 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a   - 1];.  }else{.
109f0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10a00 6b 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(2,3); pOp = 
10a10 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31  &aOp[pOp->p3 - 1
10a20 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  ];.  }.  break;.
10a30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e  }../* Opcode: An
10a40 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
10a50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
10a60 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32  ]=(r[P1] && r[P2
10a70 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
10a80 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
10a90 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
10aa0 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
10ab0 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
10ac0 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
10ad0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
10ae0 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
10af0 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
10b00 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
10b10 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
10b20 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
10b30 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
10b40 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
10b50 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
10b60 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
10b70 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
10b80 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
10b90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
10ba0 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32  ]=(r[P1] || r[P2
10bb0 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
10bc0 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
10bd0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
10be0 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
10bf0 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
10c00 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
10c10 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
10c20 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
10c30 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
10c40 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
10c50 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
10c60 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
10c70 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
10c80 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
10c90 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
10ca0 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
10cb0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
10cc0 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
10cd0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10ce0 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
10cf0 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
10d00 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
10d10 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10d20 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
10d30 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
10d40 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
10d50 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
10d60 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
10d70 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
10d80 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
10d90 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
10da0 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
10db0 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
10dc0 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e  r NULL */..  pIn
10dd0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10de0 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
10df0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10e00 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
10e10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
10e20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
10e30 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
10e40 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d    }.  pIn2 = &aM
10e50 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
10e60 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  f( pIn2->flags &
10e70 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
10e80 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v2 = 2;.  }else
10e90 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74  {.    v2 = sqlit
10ea0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
10eb0 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69  In2)!=0;.  }.  i
10ec0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
10ed0 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74  OP_And ){.    st
10ee0 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10ef0 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67  ned char and_log
10f00 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30  ic[] = { 0, 0, 0
10f10 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c  , 0, 1, 2, 0, 2,
10f20 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61   2 };.    v1 = a
10f30 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  nd_logic[v1*3+v2
10f40 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
10f50 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
10f60 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f  igned char or_lo
10f70 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20  gic[] = { 0, 1, 
10f80 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31  2, 1, 1, 1, 2, 1
10f90 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
10fa0 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  or_logic[v1*3+v2
10fb0 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  ];.  }.  pOut = 
10fc0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
10fd0 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
10fe0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10ff0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
11000 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11010 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
11020 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
11030 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
11040 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11050 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
11060 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
11070 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
11080 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = !r[P1].**.** I
11090 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
110a0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
110b0 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
110c0 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
110d0 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
110e0 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
110f0 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
11100 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11110 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
11120 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
11130 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
11140 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11160 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
11170 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
11180 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11190 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
111a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
111b0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
111c0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
111d0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
111e0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
111f0 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
11200 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
11210 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11220 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
11230 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
11240 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11250 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
11260 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
11270 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72  opsis: r[P1]= ~r
11280 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
11290 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  pret the content
112a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
112b0 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  as an integer.  
112c0 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65  Store the.** one
112d0 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20  s-complement of 
112e0 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74  the P1 value int
112f0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  o register P2.  
11300 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61  If P1 holds.** a
11310 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
11320 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a   a NULL in P2..*
11330 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74  /.case OP_BitNot
11340 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11350 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
11360 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  TNOT, in1, out2 
11370 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11380 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
11390 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
113a0 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
113b0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
113c0 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
113d0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
113e0 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
113f0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
11400 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
11410 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65  i = ~sqlite3Vdbe
11420 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
11430 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11440 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20  /* Opcode: Once 
11450 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
11460 2a 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e 63  * Check the "onc
11470 65 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20 50  e" flag number P
11480 31 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 2c  1. If it is set,
11490 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
114a0 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68  tion P2. .** Oth
114b0 65 72 77 69 73 65 2c 20 73 65 74 20 74 68 65 20  erwise, set the 
114c0 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68  flag and fall th
114d0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
114e0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
114f0 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
11500 2c 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  , this opcode ca
11510 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69  uses all followi
11520 6e 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74 68  ng opcodes up th
11530 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75 74  rough P2.** (but
11540 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 50   not including P
11550 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f  2) to run just o
11560 6e 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73 6b  nce and to be sk
11570 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75  ipped on subsequ
11580 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72  ent.** times thr
11590 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a  ough the loop..*
115a0 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20  *.** All "once" 
115b0 66 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69 61  flags are initia
115c0 6c 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65 6e  lly cleared when
115d0 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64 20  ever a prepared 
115e0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72  statement.** fir
115f0 73 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75 6e  st begins to run
11600 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63  ..*/.case OP_Onc
11610 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
11620 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
11630 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d  sert( pOp->p1<p-
11640 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20  >nOnceFlag );.  
11650 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11660 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
11670 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20  ->p1]!=0, 2);.  
11680 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  if( p->aOnceFlag
11690 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20  [pOp->p1] ){.   
116a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
116b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
116c0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
116d0 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  >p1] = 1;.  }.  
116e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
116f0 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
11700 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
11710 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11720 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11730 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
11740 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
11750 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
11760 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
11770 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
11780 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
11790 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
117a0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
117b0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
117c0 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f  s non-zero..*/./
117d0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20  * Opcode: IfNot 
117e0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
117f0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
11800 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11810 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c  gister P1 is Fal
11820 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  se.  The value.*
11830 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
11840 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20  false if it has 
11850 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
11860 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  of zero.  If the
11870 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
11880 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
11890 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
118a0 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
118b0 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  non-zero..*/.cas
118c0 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20  e OP_If:        
118d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
118e0 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50  , in1 */.case OP
118f0 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  _IfNot: {       
11900 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
11910 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20  1 */.  int c;.  
11920 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11930 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
11940 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11950 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70  ull ){.    c = p
11960 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p3;.  }else{
11970 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
11980 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
11990 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  NT.    c = sqlit
119a0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
119b0 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20  In1)!=0;.#else. 
119c0 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
119d0 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
119e0 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20  )!=0.0;.#endif. 
119f0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
11a00 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63  de==OP_IfNot ) c
11a10 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62   = !c;.  }.  Vdb
11a20 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d  eBranchTaken(c!=
11a30 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29  0, 2);.  if( c )
11a40 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
11a50 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
11a60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11a70 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
11a80 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11a90 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  :  if r[P1]==NUL
11aa0 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
11ab0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
11ac0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11ad0 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
11ae0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
11af0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
11b00 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
11b10 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
11b20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
11b30 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
11b40 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
11b50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11b60 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
11b70 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
11b80 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11b90 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
11ba0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
11bb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11bc0 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
11bd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11be0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
11bf0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
11c00 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
11c10 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11c20 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
11c30 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
11c40 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
11c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
11c60 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
11c70 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
11c80 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11c90 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
11ca0 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
11cb0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11cc0 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
11cd0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11ce0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11cf0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
11d00 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
11d10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11d20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
11d30 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
11d40 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a  s:  r[P3]=PX.**.
11d50 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
11d60 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
11d70 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
11d80 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
11d90 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
11da0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
11db0 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
11dc0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
11dd0 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
11de0 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
11df0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
11e00 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
11e10 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
11e20 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
11e30 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
11e40 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
11e50 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
11e60 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
11e70 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
11e80 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
11e90 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
11ea0 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
11eb0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
11ec0 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  .** If the colum
11ed0 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  n contains fewer
11ee0 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
11ef0 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
11f00 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
11f10 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
11f20 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
11f30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
11f40 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
11f50 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
11f60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
11f70 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
11f80 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
11f90 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
11fa0 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
11fb0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
11fc0 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
11fd0 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
11fe0 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
11ff0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
12000 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
12010 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
12020 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
12030 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
12040 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
12050 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
12060 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
12070 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49  bit set..**.** I
12080 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  f the OPFLAG_LEN
12090 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
120a0 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73  G_TYPEOFARG bits
120b0 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77   are set on P5 w
120c0 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  hen.** the resul
120d0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
120e0 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  to only be used 
120f0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
12100 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a  of a length().**
12110 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e   or typeof() fun
12120 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  ction, respectiv
12130 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e  ely.  The loadin
12140 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73  g of large blobs
12150 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70   can be.** skipp
12160 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
12170 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  and all content 
12180 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73  loading can be s
12190 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f  kipped for typeo
121a0 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f()..*/.case OP_
121b0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20  Column: {.  i64 
121c0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f  payloadSize64; /
121d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
121e0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
121f0 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
12200 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d          /* colum
12210 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72  n number to retr
12220 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ieve */.  VdbeCu
12230 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
12240 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
12250 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  */.  BtCursor *p
12260 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42  Crsr;   /* The B
12270 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20  Tree cursor */. 
12280 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
12290 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
122a0 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
122b0 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
122c0 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
122d0 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
122e0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
122f0 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
12300 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
12310 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
12320 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
12330 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
12340 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74   */.  Mem *pDest
12350 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72  ;        /* Wher
12360 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65  e to write the e
12370 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
12380 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  /.  Mem sMem;   
12390 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
123a0 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
123b0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
123c0 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44  /.  const u8 *zD
123d0 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f  ata;   /* Part o
123e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  f the record bei
123f0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
12400 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20  const u8 *zHdr; 
12410 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72     /* Next unpar
12420 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20  sed byte of the 
12430 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  header */.  cons
12440 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f  t u8 *zEndHdr; /
12450 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72  * Pointer to fir
12460 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68  st byte after th
12470 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33  e header */.  u3
12480 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20  2 offset;       
12490 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20   /* Offset into 
124a0 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33  the data */.  u3
124b0 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20 20  2 szField;      
124c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
124d0 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  tes in the conte
124e0 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  nt of a field */
124f0 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20 20  .  u32 avail;   
12500 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12510 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61 69  of bytes of avai
12520 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20  lable data */.  
12530 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
12540 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
12550 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
12560 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 31  d header */.  u1
12570 36 20 66 78 3b 20 20 20 20 20 20 20 20 20 20 20  6 fx;           
12580 20 2f 2a 20 70 44 65 73 74 2d 3e 66 6c 61 67 73   /* pDest->flags
12590 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
125a0 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
125b0 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
125c0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
125d0 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
125e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
125f0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
12600 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
12610 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
12620 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
12630 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
12640 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
12650 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
12660 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
12670 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
12680 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
12690 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
126a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
126b0 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69  sert( p2<pC->nFi
126c0 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74  eld );.  aOffset
126d0 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a   = pC->aOffset;.
126e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
126f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
12700 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
12710 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b  VtabCursor==0 );
12720 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65   /* OP_Column ne
12730 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69  ver called on vi
12740 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
12750 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20  endif.  pCrsr = 
12760 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
12770 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
12780 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  || pC->pseudoTab
12790 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43  leReg>0 ); /* pC
127a0 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75  rsr NULL on Pseu
127b0 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73  doTables */.  as
127c0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c  sert( pCrsr!=0 |
127d0 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
127e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d            /* pC-
127f0 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75  >nullRow on Pseu
12800 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f  doTables */..  /
12810 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
12820 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20  cache is stale, 
12830 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
12840 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ate */.  rc = sq
12850 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
12860 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
12870 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
12880 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
12890 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
128a0 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74  atus!=p->cacheCt
128b0 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  r ){.    if( pC-
128c0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
128d0 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29    if( pCrsr==0 )
128e0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
128f0 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
12900 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20  eReg>0 );.      
12910 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
12920 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12930 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  g];.        asse
12940 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
12950 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
12960 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
12970 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
12980 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
12990 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
129a0 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20  szRow = avail = 
129b0 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20  pReg->n;.       
129c0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
129d0 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20  )pReg->z;.      
129e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
129f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12a00 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
12a10 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12a20 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
12a30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
12a40 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
12a50 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  );.      if( pC-
12a60 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
12a70 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
12a80 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
12a90 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
12aa0 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
12ab0 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
12ac0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
12ad0 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
12ae0 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73  e64);.        as
12af0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
12b00 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62  _OK ); /* True b
12b10 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
12b20 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
12b30 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f  ove */.        /
12b40 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  * sqlite3BtreePa
12b50 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65  rseCellPtr() use
12b60 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20  s getVarint32() 
12b70 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20  to extract the. 
12b80 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61         ** payloa
12b90 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73  d size, so it is
12ba0 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
12bb0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f  payloadSize64 to
12bc0 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c   be.        ** l
12bd0 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
12be0 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ts. */.        a
12bf0 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53  ssert( (payloadS
12c00 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
12c10 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61  AX_U32)==(u64)pa
12c20 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20  yloadSize64 );. 
12c30 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
12c40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
12c50 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
12c60 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70  vail);.        p
12c70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
12c80 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
12c90 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  e64;.      }else
12ca0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
12cb0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
12cc0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
12cd0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56  r) );.        VV
12ce0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
12cf0 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
12d00 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61  e(pCrsr, &pC->pa
12d10 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
12d20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
12d30 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
12d40 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
12d50 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
12d60 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
12d70 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46  qlite3BtreeDataF
12d80 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
12d90 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  il);.      }.   
12da0 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c     assert( avail
12db0 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d  <=65536 );  /* M
12dc0 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65  aximum page size
12dd0 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20   is 64KiB */.   
12de0 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
12df0 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
12e00 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
12e10 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e  pC->szRow = pC->
12e20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
12e30 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12e40 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76    pC->szRow = av
12e50 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ail;.      }.   
12e60 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
12e70 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
12e80 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
12e90 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
12ea0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
12eb0 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20  o_big;.      }. 
12ec0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
12ed0 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
12ee0 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
12ef0 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
12f00 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
12f10 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20  w, offset);.    
12f20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
12f30 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b   0;.    aOffset[
12f40 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20  0] = offset;..  
12f50 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
12f60 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
12f70 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
12f80 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
12f90 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
12fa0 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
12fb0 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
12fc0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
12fd0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
12fe0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
12ff0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
13000 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
13010 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
13020 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
13030 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
13040 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
13050 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
13060 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
13070 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
13080 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
13090 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
130a0 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
130b0 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
130c0 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
130d0 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
130e0 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
130f0 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
13100 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
13110 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
13120 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
13130 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
13140 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
13150 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
13160 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  || offset > pC->
13170 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20  payloadSize ){. 
13180 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
13190 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
131a0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
131b0 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  umn_error;.    }
131c0 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c  ..    if( avail<
131d0 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20  offset ){.      
131e0 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
131f0 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
13200 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
13210 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
13220 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
13230 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
13240 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
13250 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
13260 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
13270 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
13280 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
13290 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
132a0 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
132b0 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
132c0 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
132d0 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
132e0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
132f0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
13300 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20  C->szRow = 0;.  
13310 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20    }..    /* The 
13320 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69  following goto i
13330 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
13340 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d  n.  It can be om
13350 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a  itted and.    **
13360 20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c   everything will
13370 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75   still work.  Bu
13380 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d  t OP_Column is m
13390 65 61 73 75 72 61 62 6c 79 20 66 61 73 74 65 72  easurably faster
133a0 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70  .    ** by skipp
133b0 69 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65  ing the subseque
133c0 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20  nt conditional, 
133d0 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20  which is always 
133e0 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  true..    */.   
133f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
13400 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
13410 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
13420 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
13430 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c  .    goto op_col
13440 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b  umn_read_header;
13450 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
13460 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
13470 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
13480 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
13490 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
134a0 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
134b0 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
134c0 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
134d0 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a  nd pC->aType[]..
134e0 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e    */.  if( pC->n
134f0 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
13500 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
13510 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20   is more header 
13520 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61  available for pa
13530 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63  rsing in the rec
13540 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20  ord, try.    ** 
13550 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74  to extract addit
13560 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20  ional fields up 
13570 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31  through the p2+1
13580 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a  -th field .    *
13590 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f  /.    op_column_
135a0 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20  read_header:.   
135b0 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66   if( pC->iHdrOff
135c0 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  set<aOffset[0] )
135d0 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  {.      /* Make 
135e0 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74  sure zData point
135f0 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74  s to enough of t
13600 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76  he record to cov
13610 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  er the header. *
13620 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
13630 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20  aRow==0 ){.     
13640 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c     memset(&sMem,
13650 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
13660 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
13670 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
13680 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
13690 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20  , aOffset[0], . 
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65      !pC->isTable
136d0 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
136e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
136f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
13700 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13710 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
13720 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
13730 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
13740 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13750 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
13760 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  Row;.      }.  .
13770 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e        /* Fill in
13780 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e   pC->aType[i] an
13790 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
137a0 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
137b0 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
137c0 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
137d0 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
137e0 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74  offset = aOffset
137f0 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
13800 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
13810 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
13820 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
13830 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
13840 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70      assert( i<=p
13850 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64  2 && zHdr<zEndHd
13860 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
13870 20 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b         if( zHdr[
13880 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  0]<0x80 ){.     
13890 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d       t = zHdr[0]
138a0 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
138b0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ++;.        }els
138c0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
138d0 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
138e0 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
138f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
13900 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69       pC->aType[i
13910 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73  ] = t;.        s
13920 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33  zField = sqlite3
13930 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
13940 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  n(t);.        of
13950 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b  fset += szField;
13960 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66  .        if( off
13970 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20  set<szField ){  
13980 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65  /* True if offse
13990 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20  t overflows */. 
139a0 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20           zHdr = 
139b0 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a  &zEndHdr[1];  /*
139c0 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43   Forces SQLITE_C
139d0 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65  ORRUPT return be
139e0 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  low */.         
139f0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
13a00 7d 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20  }.        i++;. 
13a10 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
13a20 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20  ] = offset;.    
13a30 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20    }while( i<=p2 
13a40 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20  && zHdr<zEndHdr 
13a50 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64  );.      pC->nHd
13a60 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20  rParsed = i;.   
13a70 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
13a80 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d  t = (u32)(zHdr -
13a90 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69   zData);.      i
13aa0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
13ab0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
13ac0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
13ad0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
13ae0 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
13af0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  _Null;.      }. 
13b00 20 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72   .      /* The r
13b10 65 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74  ecord is corrupt
13b20 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66   if any of the f
13b30 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75  ollowing are tru
13b40 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20  e:.      ** (1) 
13b50 74 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65  the bytes of the
13b60 20 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70   header extend p
13b70 61 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64  ast the declared
13b80 20 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20   header size.   
13b90 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28     **          (
13ba0 7a 48 64 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20  zHdr>zEndHdr).  
13bb0 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65      ** (2) the e
13bc0 6e 74 69 72 65 20 68 65 61 64 65 72 20 77 61 73  ntire header was
13bd0 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c   used but not al
13be0 6c 20 64 61 74 61 20 77 61 73 20 75 73 65 64 0a  l data was used.
13bf0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
13c00 20 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72    (zHdr==zEndHdr
13c10 20 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e   && offset!=pC->
13c20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
13c30 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e     ** (3) the en
13c40 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78  d of the data ex
13c50 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65  tends beyond the
13c60 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
13c70 72 64 2e 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  rd..      **    
13c80 20 20 20 20 20 20 28 6f 66 66 73 65 74 20 3e 20        (offset > 
13c90 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13ca0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
13cb0 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48  if( (zHdr>=zEndH
13cc0 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64  dr && (zHdr>zEnd
13cd0 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70  Hdr || offset!=p
13ce0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29  C->payloadSize))
13cf0 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73  .       || (offs
13d00 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64  et > pC->payload
13d10 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20  Size).      ){. 
13d20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
13d30 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
13d40 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
13d50 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
13d60 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
13d70 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72    /* If after tr
13d80 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20  ying to extract 
13d90 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  new entries from
13da0 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64   the header, nHd
13db0 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a  rParsed is.    *
13dc0 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74  * still not up t
13dd0 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73  o p2, that means
13de0 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
13df0 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20   has fewer than 
13e00 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e  p2.    ** column
13e10 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c  s.  So the resul
13e20 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  t will be either
13e30 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
13e40 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20  ue or a NULL..  
13e50 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
13e60 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
13e70 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
13e80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d  ->p4type==P4_MEM
13e90 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
13ea0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
13eb0 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
13ec0 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
13ed0 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65  tatic);.      }e
13ee0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
13ef0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
13f00 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
13f10 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70   }.      goto op
13f20 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
13f30 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74   }.  }..  /* Ext
13f40 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  ract the content
13f50 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68   for the p2+1-th
13f60 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f   column.  Contro
13f70 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20  l can only.  ** 
13f80 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
13f90 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c   if aOffset[p2],
13fa0 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20   aOffset[p2+1], 
13fb0 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32  and pC->aType[p2
13fc0 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76  ] are.  ** all v
13fd0 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  alid..  */.  ass
13fe0 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72  ert( p2<pC->nHdr
13ff0 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65  Parsed );.  asse
14000 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
14010 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  K );.  assert( s
14020 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
14030 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65  emInvariants(pDe
14040 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62  st) );.  if( Vdb
14050 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73  eMemDynamic(pDes
14060 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  t) ) sqlite3Vdbe
14070 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
14080 29 3b 0a 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  );.  t = pC->aTy
14090 70 65 5b 70 32 5d 3b 0a 20 20 69 66 28 20 70 43  pe[p2];.  if( pC
140a0 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
140b0 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
140c0 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
140d0 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
140e0 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
140f0 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
14100 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
14110 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
14120 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
14130 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
14140 67 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ge */.    sqlite
14150 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 70  3VdbeSerialGet(p
14160 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b  C->aRow+aOffset[
14170 70 32 5d 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  p2], t, pDest);.
14180 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
14190 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
141a0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
141b0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
141c0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
141d0 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20    if( ((pOp->p5 
141e0 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
141f0 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
14200 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
14210 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
14220 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
14230 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
14240 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29  _TYPEOFARG)!=0))
14250 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20  .     || (len = 
14260 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14270 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a  lTypeLen(t))==0.
14280 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
14290 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c  Content is irrel
142a0 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20  evant for.      
142b0 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70  **    1. the typ
142c0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a  eof() function,.
142d0 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74        **    2. t
142e0 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
142f0 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20  ction if X is a 
14300 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20  blob, and.      
14310 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20  **    3. if the 
14320 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
14330 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a  s zero..      **
14340 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
14350 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63  well use bogus c
14360 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
14370 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20  an reading.     
14380 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d   ** content from
14390 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c   disk.  NULL wil
143a0 6c 20 77 6f 72 6b 20 66 6f 72 20 74 68 65 20 76  l work for the v
143b0 61 6c 75 65 20 66 6f 72 20 73 74 72 69 6e 67 73  alue for strings
143c0 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c  .      ** and bl
143d0 6f 62 73 20 61 6e 64 20 77 68 61 74 65 76 65 72  obs and whatever
143e0 20 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f   is in the paylo
143f0 61 64 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c  adSize64 variabl
14400 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20  e.      ** will 
14410 77 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68  work for everyth
14420 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20  ing else. */.   
14430 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14440 72 69 61 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20  rialGet(t<=13 ? 
14450 28 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a  (u8*)&payloadSiz
14460 65 36 34 20 3a 20 30 2c 20 74 2c 20 70 44 65 73  e64 : 0, t, pDes
14470 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
14480 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
14490 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
144a0 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74  e(pCrsr, aOffset
144b0 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e  [p2], len, !pC->
144c0 69 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20  isTable,.       
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 70 44 65 73              pDes
144f0 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
14500 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
14510 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
14520 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
14530 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
14540 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
14550 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
14560 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ->z, t, pDest);.
14570 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
14580 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d  gs &= ~MEM_Ephem
14590 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44  ;.    }.  }.  pD
145a0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
145b0 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  ing;..op_column_
145c0 6f 75 74 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65  out:.  /* If the
145d0 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73   column value is
145e0 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   an ephemeral st
145f0 72 69 6e 67 2c 20 67 6f 20 61 68 65 61 64 20 61  ring, go ahead a
14600 6e 64 20 70 65 72 73 69 73 74 0a 20 20 2a 2a 20  nd persist.  ** 
14610 74 68 61 74 20 73 74 72 69 6e 67 20 69 6e 20 63  that string in c
14620 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 6d  ase the cursor m
14630 6f 76 65 73 20 62 65 66 6f 72 65 20 74 68 65 20  oves before the 
14640 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a  column value is.
14650 20 20 2a 2a 20 75 73 65 64 2e 20 20 54 68 65 20    ** used.  The 
14660 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64  following code d
14670 6f 65 73 20 74 68 65 20 65 71 75 69 76 61 6c 65  oes the equivale
14680 6e 74 20 6f 66 20 44 65 65 70 68 65 6d 65 72 61  nt of Deephemera
14690 6c 69 7a 65 28 29 0a 20 20 2a 2a 20 62 75 74 20  lize().  ** but 
146a0 64 6f 65 73 20 69 74 20 66 61 73 74 65 72 2e 20  does it faster. 
146b0 2a 2f 0a 20 20 69 66 28 20 28 70 44 65 73 74 2d  */.  if( (pDest-
146c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  >flags & MEM_Eph
146d0 65 6d 29 21 3d 30 20 26 26 20 70 44 65 73 74 2d  em)!=0 && pDest-
146e0 3e 7a 20 29 7b 0a 20 20 20 20 66 78 20 3d 20 70  >z ){.    fx = p
146f0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Dest->flags & (M
14700 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
14710 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 66 78  ;.    assert( fx
14720 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 61 74 61  !=0 );.    zData
14730 20 3d 20 28 63 6f 6e 73 74 20 75 38 2a 29 70 44   = (const u8*)pD
14740 65 73 74 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20  est->z;.    len 
14750 3d 20 70 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20  = pDest->n;.    
14760 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
14770 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
14780 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29  (pDest, len+2) )
14790 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
147a0 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e    memcpy(pDest->
147b0 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a  z, zData, len);.
147c0 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e      pDest->z[len
147d0 5d 20 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74  ] = 0;.    pDest
147e0 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a  ->z[len+1] = 0;.
147f0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
14800 20 3d 20 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a   = fx|MEM_Term;.
14810 20 20 7d 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72    }.op_column_er
14820 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  ror:.  UPDATE_MA
14830 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
14840 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
14850 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
14860 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
14870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
14880 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
14890 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
148a0 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
148b0 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
148c0 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
148d0 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
148e0 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
148f0 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
14900 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
14910 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
14920 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
14930 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
14940 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
14950 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
14960 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
14970 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
14980 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
14990 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
149a0 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
149b0 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
149c0 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
149d0 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
149e0 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
149f0 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
14a00 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
14a10 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
14a20 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
14a30 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
14a40 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
14a50 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
14a60 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
14a70 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
14a80 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
14a90 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
14aa0 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
14ab0 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
14ac0 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
14ad0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
14ae0 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
14af0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
14b00 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
14b10 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
14b20 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  ) );.    applyAf
14b30 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66  finity(pIn1, cAf
14b40 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  f, encoding);.  
14b50 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
14b60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
14b70 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20  ode: MakeRecord 
14b80 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
14b90 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
14ba0 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d 29  =mkrec(r[P1@P2])
14bb0 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50  .**.** Convert P
14bc0 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69  2 registers begi
14bd0 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e  nning with P1 in
14be0 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66  to the [record f
14bf0 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73  ormat].** use as
14c00 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
14c10 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
14c20 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
14c30 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
14c40 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
14c50 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20  code can decode 
14c60 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72  the record later
14c70 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
14c80 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
14c90 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
14ca0 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
14cb0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
14cc0 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
14cd0 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
14ce0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
14cf0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
14d00 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
14d10 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
14d20 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
14d30 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
14d40 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
14d50 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
14d60 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
14d70 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
14d80 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
14d90 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
14da0 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
14db0 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
14dc0 65 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e  e affinity BLOB.
14dd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
14de0 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a  Record: {.  u8 *
14df0 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20  zNewRecord;     
14e00 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74     /* A buffer t
14e10 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
14e20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
14e30 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rd */.  Mem *pRe
14e40 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
14e50 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * The new record
14e60 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b   */.  u64 nData;
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14e80 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
14e90 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
14ea0 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20  .  int nHdr;    
14eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14ec0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14ed0 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
14ee0 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20    i64 nByte;    
14ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
14f00 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
14f10 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20  for this record 
14f20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20  */.  i64 nZero; 
14f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14f40 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
14f50 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
14f60 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
14f70 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20    int nVarint;  
14f80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14f90 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
14fa0 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32   varint */.  u32
14fb0 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20   serial_type;   
14fc0 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c      /* Type fiel
14fd0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74  d */.  Mem *pDat
14fe0 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a0;           /*
14ff0 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20   First field to 
15000 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
15010 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15020 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20   Mem *pLast;    
15030 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
15040 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63  field of the rec
15050 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ord */.  int nFi
15060 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eld;            
15070 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
15080 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
15090 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
150a0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a  finity;       /*
150b0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74   The affinity st
150c0 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63  ring for the rec
150d0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c  ord */.  int fil
150e0 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20  e_format;       
150f0 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74  /* File format t
15100 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69  o use for encodi
15110 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  ng */.  int i;  
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15130 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
15140 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61  zNewRecord[] hea
15150 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20  der */.  int j; 
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
15180 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f   zNewRecord[] co
15190 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c  ntent */.  int l
151a0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
151b0 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61    /* Length of a
151c0 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20   field */..  /* 
151d0 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63  Assuming the rec
151e0 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66  ord contains N f
151f0 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72  ields, the recor
15200 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20  d format looks. 
15210 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20   ** like this:. 
15220 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   **.  ** -------
15230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15270 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a  -.  ** | hdr-siz
15280 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70  e | type 0 | typ
15290 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65  e 1 | ... | type
152a0 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e   N-1 | data0 | .
152b0 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20  .. | data N-1 | 
152c0 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
152d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
15310 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29   **.  ** Data(0)
15320 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72   is taken from r
15330 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74  egister P1.  Dat
15340 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20  a(1) comes from 
15350 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20  register P1+1.  
15360 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  ** and so forth.
15370 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20  .  **.  ** Each 
15380 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20  type field is a 
15390 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74  varint represent
153a0 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74  ing the serial t
153b0 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  ype of the .  **
153c0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64   corresponding d
153d0 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65  ata element (see
153e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
153f0 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20  alType()). The. 
15400 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65   ** hdr-size fie
15410 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72  ld is also a var
15420 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
15430 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
15440 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20   beginning.  ** 
15450 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
15460 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e   data0..  */.  n
15470 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20  Data = 0;       
15480 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
15490 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
154a0 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30  ce */.  nHdr = 0
154b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
154c0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
154d0 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
154e0 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20  .  nZero = 0;   
154f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15500 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
15510 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15520 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65  record */.  nFie
15530 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  ld = pOp->p1;.  
15540 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
15550 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
15560 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70   nField>0 && pOp
15570 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
15580 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d  2+nField<=(p->nM
15590 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
155a0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
155b0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
155c0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
155d0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
155e0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
155f0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
15600 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
15610 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
15620 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
15630 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
15640 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
15650 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
15660 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
15670 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
15680 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
15690 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
156a0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
156b0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
156c0 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
156d0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
156e0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
156f0 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
15700 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
15710 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
15720 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
15730 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
15740 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
15750 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
15760 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
15770 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
15780 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
15790 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
157a0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
157b0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
157c0 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
157d0 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
157e0 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
157f0 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
15800 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
15810 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
15820 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
15830 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
15840 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
15850 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
15860 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
15870 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
15880 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
15890 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
158a0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
158b0 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
158c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
158d0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
158e0 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52  ype);.    if( pR
158f0 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
15900 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66  Zero ){.      if
15910 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20  ( nData ){.     
15920 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15930 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
15940 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
15950 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d          nZero +=
15960 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
15970 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70          len -= p
15980 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
15990 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
159a0 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
159b0 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
159c0 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a  al_type==127 );.
159d0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
159e0 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29  rial_type==128 )
159f0 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65  ;.    nHdr += se
15a00 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f  rial_type<=127 ?
15a10 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69   1 : sqlite3Vari
15a20 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  ntLen(serial_typ
15a30 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d  e);.  }while( (-
15a40 2d 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29  -pRec)>=pData0 )
15a50 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
15a60 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
15a70 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
15a80 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
15a90 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
15aa0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
15ab0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
15ac0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
15ad0 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
15ae0 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
15af0 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
15b00 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
15b10 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
15b20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
15b30 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
15b40 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
15b50 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
15b60 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
15b70 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
15b80 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
15b90 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
15ba0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
15bb0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
15bc0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
15bd0 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
15be0 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
15bf0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
15c00 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
15c10 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
15c20 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
15c30 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
15c40 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
15c50 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
15c60 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
15c70 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d  e+nZero>db->aLim
15c80 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
15c90 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
15ca0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
15cb0 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
15cc0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15cd0 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
15ce0 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
15cf0 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
15d00 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
15d10 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
15d20 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
15d30 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
15d40 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
15d50 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
15d60 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
15d70 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
15d80 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
15d90 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
15da0 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
15db0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
15dc0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
15dd0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
15de0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
15df0 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
15e00 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
15e10 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
15e20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
15e30 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
15e40 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
15e50 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
15e60 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
15e70 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
15e80 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73   j = nHdr;.  ass
15e90 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
15ea0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
15eb0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
15ec0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
15ed0 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
15ee0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
15ef0 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
15f00 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
15f10 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
15f20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
15f30 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
15f40 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
15f50 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70  n. */.    i += p
15f60 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
15f70 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
15f80 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
15f90 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
15fa0 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49  pe */.    /* EVI
15fb0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33  DENCE-OF: R-6453
15fc0 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75  6-51728 The valu
15fd0 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
15fe0 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
15ff0 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
16000 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68  ely follow the h
16010 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20  eader. */.    j 
16020 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
16030 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
16040 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65  ord[j], pRec, se
16050 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63  rial_type); /* c
16060 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69  ontent */.  }whi
16070 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c  le( (++pRec)<=pL
16080 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ast );.  assert(
16090 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73   i==nHdr );.  as
160a0 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29  sert( j==nByte )
160b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
160c0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
160d0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
160e0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
160f0 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
16100 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
16110 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69   = MEM_Blob;.  i
16120 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
16130 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
16140 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
16150 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
16160 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
16170 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
16180 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
16190 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
161a0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
161b0 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
161c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
161d0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
161e0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
161f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
16200 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
16210 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
16220 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
16230 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
16240 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
16250 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
16260 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
16270 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
16280 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
16290 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
162a0 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
162b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
162c0 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
162d0 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
162e0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
162f0 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
16300 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
16310 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
16320 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
16330 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
16340 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
16350 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
16360 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
16370 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
16380 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
16390 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
163a0 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
163b0 74 72 79 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  try);.  pOut = o
163c0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
163d0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
163e0 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
163f0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
16400 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
16410 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
16420 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
16430 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
16440 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
16450 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
16460 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
16470 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
16480 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
16490 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
164a0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
164b0 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
164c0 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
164d0 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
164e0 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
164f0 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
16500 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
16510 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
16520 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
16550 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
16560 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16580 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
16590 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
165a0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
165b0 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
165c0 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
165d0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
165e0 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
165f0 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
16600 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
16610 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
16620 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
16630 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
16640 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
16650 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
16660 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
16670 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
16680 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
16690 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
166a0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
166b0 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
166c0 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
166d0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
166e0 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
166f0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
16700 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
16710 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
16720 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
16730 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
16740 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
16750 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16760 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
16770 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
16780 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
16790 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
167a0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
167b0 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
167c0 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66  _BEGIN ){.    if
167d0 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
167e0 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
167f0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
16800 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
16810 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
16820 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
16830 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
16840 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
16850 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
16860 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
16870 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
16880 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
16890 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  (p, "cannot open
168a0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c   savepoint - SQL
168b0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
168c0 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
168d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
168e0 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
168f0 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69      nName = sqli
16900 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d  te3Strlen30(zNam
16910 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  e);..#ifndef SQL
16920 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
16930 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54  TABLE.      /* T
16940 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65  his call is Ok e
16950 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65  ven if this save
16960 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c  point is actuall
16970 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  y a transaction.
16980 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
16990 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72  nt (and therefor
169a0 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f  e should not pro
169b0 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29  mpt xSavepoint()
169c0 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20  ) callbacks..   
169d0 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73     ** If this is
169e0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
169f0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
16a00 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61  pened, it is gua
16a10 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a  ranteed.      **
16a20 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56   that the db->aV
16a30 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73  Trans[] array is
16a40 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20   empty.  */.    
16a50 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75    assert( db->au
16a60 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
16a70 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b  b->nVTrans==0 );
16a80 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
16a90 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
16aa0 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42  (db, SAVEPOINT_B
16ab0 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20  EGIN,.          
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
16ae0 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f  ment+db->nSavepo
16af0 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
16b00 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
16b10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
16b20 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
16b30 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65  .      /* Create
16b40 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
16b50 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20   structure. */. 
16b60 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69       pNew = sqli
16b70 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
16b80 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
16b90 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
16ba0 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
16bb0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
16bc0 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
16bd0 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
16be0 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
16bf0 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
16c00 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
16c10 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
16c20 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
16c30 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
16c40 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
16c50 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
16c60 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
16c70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
16c80 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
16c90 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
16ca0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
16cb0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
16cc0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16cd0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
16ce0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
16cf0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
16d00 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
16d10 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a     }..        /*
16d20 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
16d30 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
16d40 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
16d50 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
16d60 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
16d70 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
16d80 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
16d90 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
16da0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
16db0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
16dc0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
16dd0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
16de0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
16df0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
16e00 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
16e10 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
16e20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
16e30 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
16e40 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
16e50 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
16e60 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
16e70 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
16e80 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
16e90 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
16ea0 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
16eb0 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
16ec0 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
16ed0 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
16ee0 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
16ef0 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
16f00 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
16f10 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
16f20 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
16f30 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
16f40 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
16f50 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
16f60 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
16f70 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
16f80 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20  dbeError(p, "no 
16f90 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
16fa0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
16fb0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
16fc0 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
16fd0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
16fe0 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
16ff0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
17000 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
17010 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
17020 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
17030 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
17040 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
17050 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
17060 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
17070 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
17080 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
17090 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
170a0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
170d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
170e0 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
170f0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17100 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
17110 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
17120 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
17130 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17140 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
17150 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
17160 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
17170 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
17180 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
17190 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
171a0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
171b0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
171c0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
171d0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
171e0 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
171f0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17200 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17210 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
17220 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
17230 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
17240 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
17250 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17260 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17270 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17280 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17290 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
172a0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
172b0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
172c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
172d0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
172e0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
172f0 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
17300 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
17310 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17320 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17330 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17340 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17350 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
17360 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17370 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
17380 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17390 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
173a0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
173b0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
173c0 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
173d0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
173e0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
173f0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
17400 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
17410 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
17420 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17430 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
17440 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
17450 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
17460 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17470 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  es)!=0;.        
17480 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
17490 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
174a0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
174b0 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
174c0 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
174d0 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17500 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
17510 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
17550 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
17560 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17570 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17580 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17590 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
175a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
175b0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
175c0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
175d0 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
175e0 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
175f0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17600 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17610 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
17620 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
17630 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
17640 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
17650 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17660 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
17670 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17680 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17690 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
176a0 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
176b0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
176c0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
176d0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
176e0 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
176f0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
17700 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
17710 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17720 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
17730 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
17740 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
17750 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17760 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
17770 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
17780 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
17790 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
177a0 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
177b0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
177c0 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
177d0 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
177e0 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
177f0 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
17800 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
17810 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
17820 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
17830 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
17840 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
17850 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
17860 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
17870 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
17880 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
17890 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
178a0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
178b0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
178c0 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
178d0 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
178e0 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
178f0 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
17900 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
17910 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
17920 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
17930 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
17940 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
17950 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
17960 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
17970 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
17980 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
17990 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
179a0 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
179b0 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
179c0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
179d0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
179e0 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
179f0 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
17a00 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
17a10 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
17a20 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17a30 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
17a40 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
17a50 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
17a60 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
17a70 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
17a80 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
17a90 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
17aa0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17ab0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
17ac0 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
17ad0 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
17ae0 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
17af0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
17b00 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
17b10 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
17b20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
17b30 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
17b40 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
17b50 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
17b60 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
17b70 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
17b80 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
17b90 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
17ba0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17bb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
17bc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
17bd0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
17be0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17bf0 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
17c00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
17c10 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
17c20 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
17c30 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
17c40 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
17c50 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
17c60 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
17c70 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
17c80 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
17c90 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
17ca0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
17cb0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
17cc0 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
17cd0 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
17ce0 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
17cf0 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
17d00 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
17d10 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
17d20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
17d30 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
17d40 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
17d50 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
17d60 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
17d70 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
17d80 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
17d90 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
17da0 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
17db0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
17dc0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
17dd0 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
17de0 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
17df0 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
17e00 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
17e10 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
17e20 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17e30 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
17e40 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
17e50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
17e60 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
17e70 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
17e80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
17e90 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
17ea0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
17eb0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
17ec0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
17ed0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17ee0 20 29 3b 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f   );..  if( turnO
17ef0 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
17f00 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72  k && db->nVdbeWr
17f10 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  ite>0 ){.    /* 
17f20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
17f30 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
17f40 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
17f50 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
17f60 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
17f70 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
17f80 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
17f90 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
17fa0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
17fb0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
17fc0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
17fd0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
17fe0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
18010 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
18020 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18030 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
18040 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
18050 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
18060 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
18070 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
18080 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
18090 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
180a0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
180b0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
180c0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
180d0 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
180e0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
180f0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
18100 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
18110 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
18120 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18130 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18140 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
18150 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
18160 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
18170 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
18180 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
18190 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
181a0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
181b0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
181c0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
181d0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
181e0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
181f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18200 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
18210 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
18220 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  USY;.        got
18230 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18240 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
18250 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
18260 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
18270 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
18280 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
18290 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
182a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
182b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
182c0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
182d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
182e0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
182f0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18300 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
18310 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
18320 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  p,.        (!des
18330 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
18340 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
18350 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
18360 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18370 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
18380 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
18390 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
183a0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
183b0 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
183c0 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
183d0 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
183e0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
183f0 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
18400 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
18410 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
18420 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18430 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
18440 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
18450 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e  .** Begin a tran
18460 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62  saction on datab
18470 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e  ase P1 if a tran
18480 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  saction is not a
18490 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65  lready.** active
184a0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  ..** If P2 is no
184b0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
184c0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
184d0 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20   is started, or 
184e0 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72  if a .** read-tr
184f0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72  ansaction is alr
18500 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20  eady active, it 
18510 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61  is upgraded to a
18520 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18530 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  on..** If P2 is 
18540 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
18550 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
18560 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   started..**.** 
18570 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
18580 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
18590 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68  file on which th
185a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
185b0 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e  .** started.  In
185c0 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69  dex 0 is the mai
185d0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
185e0 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74  and index 1 is t
185f0 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20  he.** file used 
18600 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
18610 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f  bles.  Indices o
18620 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20  f 2 or more are 
18630 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61  used for.** atta
18640 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  ched databases..
18650 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65  **.** If a write
18660 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18670 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20  started and the 
18680 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75  Vdbe.usesStmtJou
18690 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20  rnal flag is.** 
186a0 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20  true (this flag 
186b0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64  is set if the Vd
186c0 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f  be may modify mo
186d0 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20  re than one row 
186e0 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77  and may.** throw
186f0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
18700 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e  ion), a statemen
18710 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
18720 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  y also be opened
18730 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66  ..** More specif
18740 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d  ically, a statem
18750 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18760 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68  is opened iff th
18770 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
18780 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72  nnection is curr
18790 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74  ently not in aut
187a0 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72  ocommit mode, or
187b0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74   if there are ot
187c0 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74  her.** active st
187d0 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74  atements. A stat
187e0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
187f0 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61  n allows the cha
18800 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69  nges made by thi
18810 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20  s.** VDBE to be 
18820 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65  rolled back afte
18830 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f  r an error witho
18840 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c  ut having to rol
18850 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e  l back the.** en
18860 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
18870 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73  . If no error is
18880 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68   encountered, th
18890 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
188a0 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20  saction.** will 
188b0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f  automatically co
188c0 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
188d0 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
188e0 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68  If P5!=0 then th
188f0 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63  is opcode also c
18900 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61  hecks the schema
18910 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20   cookie against 
18920 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63  P3.** and the sc
18930 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
18940 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20  counter against 
18950 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  P4..** The cooki
18960 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
18970 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
18980 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
18990 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
189a0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
189b0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
189c0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
189d0 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
189e0 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
189f0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
18a00 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
18a10 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74  he schema.  If t
18a20 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f  he schema.** coo
18a30 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72  kie in P3 differ
18a40 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d  s from the schem
18a50 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20  a cookie in the 
18a60 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
18a70 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68  or.** if the sch
18a80 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
18a90 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66  ounter in P4 dif
18aa0 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75  fers from the cu
18ab0 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74  rrent.** generat
18ac0 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65  ion counter, the
18ad0 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  n an SQLITE_SCHE
18ae0 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73  MA error is rais
18af0 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e  ed and execution
18b00 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20  .** halts.  The 
18b10 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77  sqlite3_step() w
18b20 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20  rapper function 
18b30 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65  might then repre
18b40 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74  pare the.** stat
18b50 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20  ement and rerun 
18b60 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  it from the begi
18b70 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nning..*/.case O
18b80 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
18b90 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
18ba0 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18bb0 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72  t iGen;..  asser
18bc0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
18bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
18be0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
18bf0 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
18c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
18c10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
18c20 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
18c30 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
18c40 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
18c50 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  p1) );.  if( pOp
18c60 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
18c70 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
18c80 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
18c90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
18ca0 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
18cb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18cc0 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
18cd0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
18ce0 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
18cf0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
18d00 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
18d10 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
18d20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
18d30 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18d40 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
18d50 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
18d60 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
18d70 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18d80 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
18d90 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
18da0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18db0 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
18dc0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18dd0 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
18de0 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
18df0 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
18e00 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
18e10 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
18e20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
18e30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
18e40 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
18e50 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
18e60 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
18e70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
18e80 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
18e90 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
18ea0 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
18eb0 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
18ec0 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
18ed0 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
18ee0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
18ef0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
18f00 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
18f10 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18f20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
18f30 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
18f40 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
18f50 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
18f60 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
18f70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18f80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18f90 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
18fa0 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
18fb0 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
18fc0 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
18fd0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
18fe0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
18ff0 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
19000 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
19010 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
19020 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
19030 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
19040 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
19050 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
19060 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
19070 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
19080 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
19090 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
190a0 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
190b0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
190c0 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
190d0 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
190e0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
190f0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74     }..    /* Gat
19100 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76  her the schema v
19110 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
19120 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20  r checking:.    
19130 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
19140 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31 39  N-OF: R-32195-19
19150 34 36 35 20 54 68 65 20 73 63 68 65 6d 61 20 76  465 The schema v
19160 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
19170 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20  y SQLite.    ** 
19180 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72  each time a quer
19190 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f  y is executed to
191a0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
191b0 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 20   internal cache 
191c0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 63  of the.    ** sc
191d0 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63  hema used when c
191e0 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c  ompiling the SQL
191f0 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74   query matches t
19200 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
19210 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65  .    ** database
19220 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74   against which t
19230 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
19240 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78  y is actually ex
19250 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  ecuted..    */. 
19260 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
19270 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
19280 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
19290 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
192a0 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d  ;.    iGen = db-
192b0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
192c0 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
192d0 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  on;.  }else{.   
192e0 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20   iGen = iMeta = 
192f0 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
19300 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
19310 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
19320 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f  NT32 );.  if( pO
19330 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21  p->p5 && (iMeta!
19340 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e  =pOp->p3 || iGen
19350 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a  !=pOp->p4.i) ){.
19360 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
19370 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
19380 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
19390 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
193a0 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
193b0 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
193c0 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
193d0 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
193e0 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
193f0 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
19400 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
19410 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
19420 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
19430 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
19440 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
19450 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
19460 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
19470 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
19480 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
19490 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
194a0 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
194b0 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
194c0 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
194d0 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
194e0 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
194f0 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
19500 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
19510 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
19520 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
19530 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
19540 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
19550 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
19560 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
19570 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
19580 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
19590 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
195a0 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
195b0 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
195c0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
195d0 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
195e0 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
195f0 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
19600 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
19610 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
19620 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
19630 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
19640 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
19650 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
19660 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
19670 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
19680 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
19690 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
196a0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
196b0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
196c0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
196d0 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
196e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
196f0 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
19700 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
19710 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
19720 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
19730 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
19740 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19750 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
19760 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
19770 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
19780 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
19790 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
197a0 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
197b0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
197c0 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
197d0 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
197e0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
197f0 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
19800 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
19810 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
19820 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
19830 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
19840 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
19850 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
19860 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
19870 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
19880 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
19890 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
198a0 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
198b0 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
198c0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
198d0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
198e0 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
198f0 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
19900 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
19910 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
19920 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
19930 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
19940 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
19950 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
19960 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
19970 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
19980 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
19990 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
199a0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
199b0 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
199c0 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
199d0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
199e0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
199f0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
19a00 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
19a10 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
19a20 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
19a30 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
19a40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
19a50 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
19a60 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
19a70 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
19a80 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
19a90 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
19aa0 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
19ab0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
19ac0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
19ad0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
19ae0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
19af0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
19b00 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
19b10 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
19b20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19b30 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
19b40 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
19b50 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
19b60 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
19b70 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
19b80 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
19b90 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
19ba0 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
19bb0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
19bc0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
19bd0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
19be0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
19bf0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
19c00 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
19c10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
19c20 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
19c30 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
19c40 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
19c50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
19c60 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
19c70 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
19c80 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
19c90 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
19ca0 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
19cb0 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
19cc0 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
19cd0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
19ce0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
19cf0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
19d00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19d10 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
19d20 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
19d30 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
19d40 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
19d50 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
19d60 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19d70 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
19d80 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
19d90 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
19da0 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
19db0 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
19dc0 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
19dd0 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
19de0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
19df0 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p3];.  sqlite3
19e00 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
19e10 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65  y(pIn3);.  /* Se
19e20 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
19e30 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
19e40 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
19e50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19e60 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
19e70 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  b->pBt, pOp->p2,
19e80 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29   (int)pIn3->u.i)
19e90 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
19ea0 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
19eb0 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
19ec0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
19ed0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
19ee0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
19ef0 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
19f00 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
19f10 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
19f20 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d  kie = (int)pIn3-
19f30 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  >u.i;.    db->fl
19f40 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e  ags |= SQLITE_In
19f50 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d  ternChanges;.  }
19f60 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
19f70 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52  ==BTREE_FILE_FOR
19f80 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  MAT ){.    /* Re
19f90 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
19fa0 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
19fb0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
19fc0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
19fd0 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69   = (u8)pIn3->u.i
19fe0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
19ff0 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1a000 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1a010 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1a020 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1a030 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1a040 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1a050 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1a060 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1a070 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1a080 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1a090 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1a0a0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
1a0b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1a0c0 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32  : OpenRead P1 P2
1a0d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1a0e0 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1a0f0 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
1a100 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
1a110 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
1a120 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
1a130 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
1a140 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
1a150 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
1a160 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
1a170 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
1a180 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
1a190 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1a1a0 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
1a1b0 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
1a1c0 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
1a1d0 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
1a1e0 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
1a1f0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
1a200 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
1a210 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
1a220 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
1a230 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
1a240 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
1a250 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
1a260 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
1a270 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
1a280 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
1a290 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
1a2a0 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
1a2b0 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
1a2c0 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
1a2d0 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
1a2e0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1a2f0 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
1a300 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
1a310 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
1a320 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
1a330 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
1a340 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
1a350 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
1a360 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
1a370 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
1a380 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
1a390 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
1a3a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
1a3b0 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
1a3c0 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
1a3d0 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
1a3e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
1a3f0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
1a400 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
1a410 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
1a420 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
1a430 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
1a440 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
1a450 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
1a460 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
1a470 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
1a480 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
1a490 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
1a4a0 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
1a4b0 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
1a4c0 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
1a4d0 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
1a4e0 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
1a4f0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
1a500 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
1a510 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
1a520 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1a530 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1a540 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1a550 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1a560 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1a570 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1a580 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1a590 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1a5a0 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1a5b0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1a5c0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1a5d0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1a5e0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1a5f0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1a600 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1a610 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1a620 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1a630 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1a640 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1a650 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1a660 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
1a670 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1a680 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65  OpenWrite, Reope
1a690 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  nIdx.*/./* Opcod
1a6a0 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20  e: ReopenIdx P1 
1a6b0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1a6c0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1a6d0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68   iDb=P3.**.** Th
1a6e0 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1a6f0 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  de works exactly
1a700 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65   like ReadOpen e
1a710 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69  xcept that it fi
1a720 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f  rst.** checks to
1a730 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73   see if the curs
1a740 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65  or on P1 is alre
1a750 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20  ady open with a 
1a760 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  root page.** num
1a770 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66  ber of P2 and if
1a780 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f   it is this opco
1a790 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  de becomes a no-
1a7a0 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  op.  In other wo
1a7b0 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63  rds,.** if the c
1a7c0 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79  ursor is already
1a7d0 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65   open, do not re
1a7e0 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  open it..**.** T
1a7f0 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1a800 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ode may only be 
1a810 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20  used with P5==0 
1a820 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e  and with P4 bein
1a830 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46  g.** a P4_KEYINF
1a840 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68  O object.  Furth
1a850 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76  ermore, the P3 v
1a860 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65  alue must be the
1a870 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72   same as.** ever
1a880 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64  y other ReopenId
1a890 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f  x or OpenRead fo
1a8a0 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f  r the same curso
1a8b0 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  r number..**.** 
1a8c0 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64  See the OpenRead
1a8d0 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74   opcode document
1a8e0 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
1a8f0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1a900 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1a910 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
1a920 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1a930 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1a940 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1a950 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  a read/write cur
1a960 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20  sor named P1 on 
1a970 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1a980 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a  ex whose root.**
1a990 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72   page is P2.  Or
1a9a0 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68   if P5!=0 use th
1a9b0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1a9c0 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64  ister P2 to find
1a9d0 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   the.** root pag
1a9e0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
1a9f0 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1aa00 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1aa10 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1aa20 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1aa30 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1aa40 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1aa50 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1aa60 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1aa70 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
1aa80 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
1aa90 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
1aaa0 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1aab0 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1aac0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
1aad0 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
1aae0 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1aaf0 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1ab00 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
1ab10 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
1ab20 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1ab30 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65  table, or to the
1ab40 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65  .** largest inde
1ab50 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20  x of any column 
1ab60 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1ab70 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73  t is actually us
1ab80 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ed..**.** This i
1ab90 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73  nstruction works
1aba0 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52   just like OpenR
1abb0 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20  ead except that 
1abc0 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72  it opens the cur
1abd0 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77  sor.** in read/w
1abe0 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20  rite mode.  For 
1abf0 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74  a given table, t
1ac00 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20  here can be one 
1ac10 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c  or more read-onl
1ac20 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20  y.** cursors or 
1ac30 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72  a single read/wr
1ac40 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e  ite cursor but n
1ac50 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53  ot both..**.** S
1ac60 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64  ee also OpenRead
1ac70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f  ..*/.case OP_Reo
1ac80 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20  penIdx: {.  int 
1ac90 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1aca0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1acb0 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1acc0 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1acd0 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1ace0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1acf0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1ad00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1ad10 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1ad20 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1ad30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1ad40 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1ad50 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   );.  pCur = p->
1ad60 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1ad70 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43    if( pCur && pC
1ad80 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75  ur->pgnoRoot==(u
1ad90 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  32)pOp->p2 ){.  
1ada0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
1adb0 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20  iDb==pOp->p3 ); 
1adc0 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65       /* Guarante
1add0 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67  ed by the code g
1ade0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  enerator */.    
1adf0 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72  goto open_cursor
1ae00 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a  _set_hints;.  }.
1ae10 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
1ae20 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  or is not curren
1ae30 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f  tly open or is o
1ae40 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65  pen on a differe
1ae50 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74  nt.  ** index, t
1ae60 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1ae70 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61   into OP_OpenRea
1ae80 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f  d to force a reo
1ae90 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  pen */.case OP_O
1aea0 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
1aeb0 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61  _OpenWrite:..  a
1aec0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26  ssert( (pOp->p5&
1aed0 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c  (OPFLAG_P2ISREG|
1aee0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1aef0 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 3d 3d  PFLAG_SEEKEQ))==
1af00 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73  pOp->p5 );.  ass
1af10 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1af20 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c  ==OP_OpenWrite |
1af30 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  | pOp->p5==0 || 
1af40 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1af50 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1af60 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1af70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1af80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1af90 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f  enRead || pOp->o
1afa0 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e  pcode==OP_Reopen
1afb0 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c  Idx.          ||
1afc0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1afd0 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70  );..  if( p->exp
1afe0 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d  ired ){.    rc =
1aff0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
1b000 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72 65 61  LLBACK;.    brea
1b010 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
1b020 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1b030 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1b040 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1b050 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1b060 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1b070 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1b080 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1b090 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1b0a0 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  ) );.  pDb = &db
1b0b0 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
1b0c0 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
1b0d0 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
1b0e0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1b0f0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1b100 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  ){.    wrFlag = 
1b110 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  1;.    assert( s
1b120 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
1b130 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
1b140 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62  ) );.    if( pDb
1b150 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1b160 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
1b170 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
1b180 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
1b190 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
1b1a0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1b1b0 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
1b1c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
1b1d0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
1b1e0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
1b1f0 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a  FLAG_P2ISREG ){.
1b200 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
1b210 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1b220 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
1b230 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
1b240 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
1b250 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
1b260 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
1b270 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1b280 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
1b290 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
1b2a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1b2b0 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
1b2c0 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
1b2d0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
1b2e0 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
1b2f0 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
1b300 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
1b310 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64  Table opcode and
1b320 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
1b330 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1b340 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
1b350 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
1b360 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
1b370 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
1b380 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
1b390 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1b3a0 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
1b3b0 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
1b3c0 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
1b3d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
1b3e0 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70  .    if( NEVER(p
1b3f0 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72  2<2) ) {.      r
1b400 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
1b410 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
1b420 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b430 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1b440 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
1b450 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1b460 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
1b470 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1b480 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  fo;.    assert( 
1b490 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1b4a0 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73  NC(db) );.    as
1b4b0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1b4c0 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46  db==db );.    nF
1b4d0 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1b4e0 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f  >nField+pKeyInfo
1b4f0 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  ->nXField;.  }el
1b500 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1b510 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1b520 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1b530 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1b540 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1b550 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1b560 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1b570 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1b580 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1b590 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1b5a0 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1b5b0 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1b5c0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1b5d0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1b5e0 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
1b5f0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1b600 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1b610 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1b620 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1b630 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1b640 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1b650 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b660 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1b670 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1b680 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
1b690 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1b6a0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1b6b0 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1b6c0 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1b6d0 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1b6e0 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1b6f0 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1b700 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1b710 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1b720 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1b730 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1b740 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1b750 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1b760 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1b770 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1b780 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1b790 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1b7a0 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1b7b0 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1b7c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1b7d0 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f  _KEYINFO;..open_
1b7e0 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1b7f0 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  :.  assert( OPFL
1b800 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1b810 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1b820 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
1b830 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45  EEKEQ==BTREE_SEE
1b840 4b 5f 45 51 20 29 3b 0a 20 20 73 71 6c 69 74 65  K_EQ );.  sqlite
1b850 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1b860 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c  s(pCur->pCursor,
1b870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b880 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1b890 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1b8a0 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1b8b0 4b 45 51 29 29 29 3b 0a 20 20 62 72 65 61 6b 3b  KEQ)));.  break;
1b8c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1b8d0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1b8e0 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1b8f0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1b900 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1b910 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1b920 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1b930 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1b940 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1b950 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1b960 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1b970 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1b980 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1b990 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1b9a0 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1b9b0 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1b9c0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1b9d0 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1b9e0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1b9f0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1ba00 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1ba10 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1ba20 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1ba30 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1ba40 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1ba50 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1ba60 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1ba70 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1ba80 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1ba90 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1baa0 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1bab0 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1bac0 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1bad0 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1bae0 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1baf0 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1bb00 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1bb10 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1bb20 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1bb30 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1bb40 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1bb50 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1bb60 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1bb70 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1bb80 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1bb90 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1bba0 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1bbb0 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1bbc0 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1bbd0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1bbe0 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1bbf0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1bc00 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1bc10 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1bc20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1bc30 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1bc40 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1bc50 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1bc60 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1bc70 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1bc80 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1bc90 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1bca0 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1bcb0 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1bcc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1bcd0 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1bce0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1bcf0 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1bd00 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1bd10 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1bd20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1bd30 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1bd40 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1bd50 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1bd60 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1bd70 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1bd80 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1bd90 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1bda0 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1bdb0 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1bdc0 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1bdd0 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1bde0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1bdf0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1be00 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1be10 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1be20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1be30 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20  , -1, 1);.  if( 
1be40 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1be50 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1be60 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1be70 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1be80 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1be90 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1bea0 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1beb0 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1bed0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1bee0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1bef0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1bf00 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1bf10 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1bf20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1bf30 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1bf40 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1bf50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1bf60 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1bf70 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1bf80 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1bf90 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1bfa0 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1bfb0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1bfc0 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1bfd0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1bfe0 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1bff0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1c000 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1c010 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1c020 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1c030 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1c040 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1c050 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1c060 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1c070 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1c080 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1c090 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c0a0 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1c0b0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1c0c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1c0d0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c0e0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1c0f0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1c100 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1c110 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1c120 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1c130 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1c140 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c150 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1c160 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1c170 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1c180 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1c190 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1c1a0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1c1b0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1c1c0 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1c1d0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1c1e0 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1c1f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1c200 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1c210 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c  no, 1, pKeyInfo,
1c220 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
1c230 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
1c240 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a  x->isTable = 0;.
1c250 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c260 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1c270 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1c280 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
1c290 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73  1, 0, pCx->pCurs
1c2a0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1c2b0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1c2c0 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73   }.  }.  pCx->is
1c2d0 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1c2e0 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1c2f0 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1c300 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1c310 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1c320 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1c330 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1c340 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1c350 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1c360 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1c370 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1c380 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1c390 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1c3a0 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1c3b0 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1c3c0 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1c3d0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1c3e0 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1c3f0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1c400 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1c410 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1c420 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1c430 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1c440 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1c450 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1c460 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1c470 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1c480 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1c490 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1c4a0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1c4b0 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1c4c0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1c4d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c4e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c4f0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1c500 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1c510 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1c520 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1c530 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1c540 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c550 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1c560 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1c570 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1c580 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1c590 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
1c5a0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
1c5b0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
1c5c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
1c5d0 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70  rterInit(db, pOp
1c5e0 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72  ->p3, pCx);.  br
1c5f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c600 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1c610 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1c620 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1c630 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1c640 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1c650 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1c660 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1c670 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1c680 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1c690 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1c6a0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1c6b0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1c6c0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1c6d0 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1c6e0 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1c6f0 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1c700 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1c710 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1c720 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c730 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1c740 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c750 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1c760 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1c770 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29  t( pC->pSorter )
1c780 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1c790 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1c7a0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1c7b0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1c7c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1c7d0 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1c7e0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1c7f0 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1c800 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1c810 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1c820 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1c830 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1c840 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1c850 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1c860 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1c870 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1c880 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1c890 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1c8a0 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1c8b0 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1c8c0 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1c8d0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1c8e0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1c8f0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1c900 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1c910 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1c920 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1c930 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1c940 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1c950 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1c960 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1c970 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1c980 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1c990 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1c9a0 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1c9b0 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1c9c0 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1c9d0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1c9e0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1c9f0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1ca00 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1ca10 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1ca20 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1ca30 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1ca40 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1ca50 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1ca60 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1ca70 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1ca80 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1ca90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1caa0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1cab0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1cac0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1cad0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1cae0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1caf0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1cb00 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43  -1, 0);.  if( pC
1cb10 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1cb20 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1cb30 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  ow = 1;.  pCx->p
1cb40 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1cb50 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1cb60 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1cb70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1cb80 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1cb90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1cba0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1cbb0 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1cbc0 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1cbd0 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1cbe0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1cbf0 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1cc00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1cc10 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1cc20 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1cc30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1cc40 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1cc50 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1cc60 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1cc70 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1cc80 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1cc90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1cca0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
1ccb0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45  * Opcode: SeekGE
1ccc0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1ccd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1cce0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1ccf0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1cd00 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1cd10 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1cd20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1cd30 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1cd40 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1cd50 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1cd60 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1cd70 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1cd80 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1cd90 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1cda0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1cdb0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1cdc0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1cdd0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1cde0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1cdf0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1ce00 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1ce10 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1ce20 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1ce30 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1ce40 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1ce50 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1ce60 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ce70 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1ce80 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1ce90 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1cea0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1ceb0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1cec0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1ced0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1cee0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1cef0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
1cf00 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
1cf10 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
1cf20 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
1cf30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1cf40 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1cf50 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1cf60 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
1cf70 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
1cf80 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1cf90 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
1cfa0 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
1cfb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1cfc0 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GT P1 P2 P3 P4 *
1cfd0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1cfe0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1cff0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d000 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1d010 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1d020 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1d030 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1d040 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1d050 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1d060 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1d070 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1d080 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1d090 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1d0a0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1d0b0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1d0c0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1d0d0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1d0e0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1d0f0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1d100 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1d110 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1d120 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1d130 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1d140 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1d150 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1d160 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
1d170 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
1d180 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1d190 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1d1a0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1d1b0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1d1c0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1d1d0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1d1e0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1d1f0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1d200 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1d210 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1d220 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1d230 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1d240 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1d250 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1d260 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1d270 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1d280 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1d290 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1d2a0 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20  e: SeekLT P1 P2 
1d2b0 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
1d2c0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1d2d0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1d2e0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1d2f0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1d300 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1d310 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1d320 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1d330 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1d340 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1d350 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1d360 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1d370 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1d380 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1d390 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1d3a0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1d3b0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1d3c0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1d3d0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1d3e0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1d3f0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1d400 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1d410 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1d420 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1d430 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1d440 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1d450 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1d460 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1d470 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1d480 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1d490 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1d4a0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1d4b0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1d4c0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
1d4d0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1d4e0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
1d4f0 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
1d500 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1d510 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1d520 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
1d530 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
1d540 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d550 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1d560 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1d570 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1d580 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32  de: SeekLE P1 P2
1d590 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1d5a0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1d5b0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1d5c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1d5d0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1d5e0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1d5f0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1d600 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1d610 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1d620 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1d630 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1d640 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1d650 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1d660 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1d670 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1d680 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1d690 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1d6a0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1d6b0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1d6c0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1d6d0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1d6e0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1d6f0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1d700 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1d710 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1d720 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1d730 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
1d740 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1d750 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1d760 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1d770 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1d780 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1d790 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1d7a0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1d7b0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1d7c0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1d7d0 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1d7e0 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1d7f0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1d800 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1d810 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1d820 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1d830 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ext..**.** See a
1d840 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1d850 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1d860 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1d870 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
1d880 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d890 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1d8a0 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
1d8b0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d8c0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20  case OP_SeekGE: 
1d8d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d8e0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1d8f0 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
1d900 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1d910 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
1d920 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   oc;.  VdbeCurso
1d930 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65  r *pC;.  Unpacke
1d940 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74  dRecord r;.  int
1d950 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69   nField;.  i64 i
1d960 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Key;      /* The
1d970 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1d980 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61   seek to */..  a
1d990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1d9a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1d9b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1d9c0 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20  ert( pOp->p2!=0 
1d9d0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1d9e0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1d9f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1da00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1da10 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1da20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1da30 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekLE == OP_See
1da40 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLT+1 );.  asser
1da50 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20  t( OP_SeekGE == 
1da60 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20  OP_SeekLT+2 );. 
1da70 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1da80 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GT == OP_SeekLT+
1da90 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  3 );.  assert( p
1daa0 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
1dab0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1dac0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63  ursor!=0 );.  oc
1dad0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1dae0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1daf0 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
1db00 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1db10 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
1db20 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  e;.#endif..  /* 
1db30 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74  For a cursor wit
1db40 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b  h the BTREE_SEEK
1db50 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74  _EQ hint, only t
1db60 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64  he OP_SeekGE and
1db70 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20  .  ** OP_SeekLE 
1db80 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f  opcodes are allo
1db90 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d  wed, and these m
1dba0 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65  ust be immediate
1dbb0 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 2a 2a  ly followed.  **
1dbc0 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20   by an OP_IdxGT 
1dbd0 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f  or OP_IdxLT opco
1dbe0 64 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  de, respectively
1dbf0 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  , with the same 
1dc00 6b 65 79 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  key..  */.#ifdef
1dc10 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1dc20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  if( sqlite3Btree
1dc30 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
1dc40 2d 3e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  ->pCursor, BTREE
1dc50 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20  _SEEK_EQ) ){.   
1dc60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1dc70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  code==OP_SeekGE 
1dc80 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1dc90 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
1dca0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1dcb0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
1dcc0 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
1dcd0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
1dce0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1dcf0 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20  ].p1==pOp[0].p1 
1dd00 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1dd10 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d  Op[1].p2==pOp[0]
1dd20 2e 70 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72  .p2 );.    asser
1dd30 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f  t( pOp[1].p3==pO
1dd40 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 61  p[0].p3 );.    a
1dd50 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34  ssert( pOp[1].p4
1dd60 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20  .i==pOp[0].p4.i 
1dd70 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a  );.  }.#endif. .
1dd80 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1dd90 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1dda0 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
1ddb0 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
1ddc0 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
1ddd0 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
1dde0 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
1ddf0 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
1de00 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
1de10 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
1de20 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20  n do.    ** the 
1de30 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74  seek, so convert
1de40 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33   it. */.    pIn3
1de50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1de60 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  ];.    if( (pIn3
1de70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
1de80 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
1de90 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
1dea0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  {.      applyNum
1deb0 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
1dec0 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  3, 0);.    }.   
1ded0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1dee0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1def0 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
1df00 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
1df10 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
1df20 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
1df30 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a  r without.    **
1df40 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1df50 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1df60 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1df70 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1df80 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1df90 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
1dfa0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
1dfb0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1dfc0 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
1dfd0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
1dfe0 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
1dff0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1e000 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
1e010 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
1e020 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65   ** then the see
1e030 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  k is not possibl
1e040 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32  e, so jump to P2
1e050 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65   */.        Vdbe
1e060 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
1e070 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ; goto jump_to_p
1e080 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  2;.        break
1e090 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1e0a0 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
1e0b0 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
1e0c0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
1e0d0 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
1e0e0 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
1e0f0 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d  m, substitute >=
1e100 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72   for > and < for
1e110 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65   <=. e.g. if the
1e120 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20   search term.   
1e130 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64     ** is 4.9 and
1e140 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70   the integer app
1e150 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20  roximation 5:.  
1e160 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
1e170 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39         (x >  4.9
1e180 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e  )    ->     (x >
1e190 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 5).      **   
1e1a0 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20       (x <= 4.9) 
1e1b0 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20     ->     (x <  
1e1c0 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  5).      */.    
1e1d0 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c    if( pIn3->u.r<
1e1e0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
1e1f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1e200 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53  OP_SeekGE==(OP_S
1e210 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20  eekGT-1) );.    
1e220 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1e230 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c  eekLT==(OP_SeekL
1e240 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E-1) );.        
1e250 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
1e260 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LE & 0x0001)==(O
1e270 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30  P_SeekGT & 0x000
1e280 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
1e290 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
1e2a0 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
1e2b0 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20  0001) ) oc--;.  
1e2c0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1e2d0 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1e2e0 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61  tion iKey is sma
1e2f0 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  ller than the ac
1e300 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1e310 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1e320 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f  substitute <= fo
1e330 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d  r < and > for >=
1e340 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65  .  */.      else
1e350 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28   if( pIn3->u.r>(
1e360 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1e370 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1e380 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65  P_SeekLE==(OP_Se
1e390 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekLT+1) );.     
1e3a0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1e3b0 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  ekGT==(OP_SeekGE
1e3c0 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
1e3d0 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1e3e0 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  T & 0x0001)==(OP
1e3f0 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31  _SeekGE & 0x0001
1e400 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1e410 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1e420 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1e430 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20  001) ) oc++;.   
1e440 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20     }.    } .    
1e450 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1e460 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1e470 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1e480 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1e490 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  es);.    pC->mov
1e4a0 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
1e4b0 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
1e4c0 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69  _Delete */.    i
1e4d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1e4e0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1e4f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e500 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  r;.    }.  }else
1e510 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1e520 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
1e530 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1e540 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1e550 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1e560 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
1e570 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1e580 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1e590 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1e5a0 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
1e5b0 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1e5c0 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1e5d0 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1e5e0 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
1e5f0 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
1e600 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
1e610 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1e620 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
1e630 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1e640 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1e650 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
1e660 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
1e670 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1e680 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
1e690 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
1e6a0 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
1e6b0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
1e6c0 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1e6d0 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1e6e0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
1e6f0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1e700 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
1e710 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1e720 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
1e730 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
1e740 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1e750 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
1e760 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
1e770 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1e780 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1e790 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1e7a0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1e7b0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1e7c0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1e7d0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1e7e0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1e7f0 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61    ExpandBlob(r.a
1e800 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  Mem);.    rc = s
1e810 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1e820 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1e830 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1e840 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
1e850 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1e860 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1e870 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e880 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e      }.  }.  pC->
1e890 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1e8a0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1e8b0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1e8c0 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
1e8d0 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
1e8e0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
1e8f0 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 6f  ;.#endif.  if( o
1e900 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20  c>=OP_SeekGE ){ 
1e910 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1e920 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGE || oc==OP
1e930 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20 69  _SeekGT );.    i
1e940 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73  f( res<0 || (res
1e950 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1e960 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekGT) ){.      r
1e970 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1e980 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
1e990 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ext(pC->pCursor,
1e9a0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1e9b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e9c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1e9d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1e9e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
1e9f0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
1ea00 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1ea10 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
1ea20 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
1ea30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
1ea40 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1ea50 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
1ea60 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1ea70 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ea80 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1ea90 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1eaa0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1eab0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1eac0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1ead0 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
1eae0 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69  .      /* res mi
1eaf0 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1eb00 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1eb10 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1eb20 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73  ck to.      ** s
1eb30 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1eb40 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  e case..      */
1eb50 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c  .      res = sql
1eb60 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1eb70 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  >pCursor);.    }
1eb80 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1eb90 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
1eba0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
1ebb0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
1ebc0 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  es ){.    goto j
1ebd0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
1ebe0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ebf0 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
1ec00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1ec10 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32  is:  intkey=r[P2
1ec20 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  ].**.** P1 is an
1ec30 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73   open table curs
1ec40 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72  or and P2 is a r
1ec50 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41  owid integer.  A
1ec60 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31  rrange.** for P1
1ec70 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74   to move so that
1ec80 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1ec90 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79  e rowid given by
1eca0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1ecb0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65  is actually a de
1ecc0 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
1ecd0 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
1ece0 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
1ecf0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
1ed00 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
1ed10 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
1ed20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
1ed30 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
1ed40 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
1ed50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
1ed60 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a  k: {    /* in2 *
1ed70 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1ed80 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
1ed90 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1eda0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1edb0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1edc0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1edd0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ede0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1edf0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1ee00 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1ee10 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e );.  pC->nullR
1ee20 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d  ow = 0;.  pIn2 =
1ee30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1ee40 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
1ee50 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62  get = sqlite3Vdb
1ee60 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
1ee70 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1ee80 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65  oveto = 1;.  bre
1ee90 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
1eea0 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
1eeb0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1eec0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1eed0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1eee0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1eef0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1ef00 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1ef10 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1ef20 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1ef30 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1ef40 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1ef50 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1ef60 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1ef70 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
1ef80 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1ef90 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1efa0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1efb0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1efc0 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
1efd0 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1efe0 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1eff0 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
1f000 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
1f010 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1f020 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1f030 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1f040 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1f050 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1f060 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
1f070 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1f080 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
1f090 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
1f0a0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
1f0b0 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
1f0c0 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
1f0d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1f0e0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1f0f0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
1f100 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
1f110 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
1f120 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
1f130 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1f140 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f150 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1f160 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1f170 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1f180 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1f190 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1f1a0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1f1b0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1f1c0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1f1d0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1f1e0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1f1f0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1f200 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1f210 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1f220 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1f230 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1f240 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
1f250 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
1f260 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
1f270 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
1f280 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
1f290 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
1f2a0 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
1f2b0 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
1f2c0 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
1f2d0 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
1f2e0 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1f2f0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1f300 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
1f310 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1f320 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
1f330 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
1f340 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
1f350 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1f360 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1f370 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
1f380 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
1f390 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1f3a0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f3b0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
1f3c0 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
1f3d0 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
1f3e0 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
1f3f0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1f400 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
1f410 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
1f420 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
1f430 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1f440 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1f450 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1f460 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
1f470 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1f480 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1f490 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1f4a0 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
1f4b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
1f4c0 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
1f4d0 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
1f4e0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
1f4f0 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
1f500 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1f510 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
1f520 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
1f530 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
1f540 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
1f550 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
1f560 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
1f570 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1f580 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
1f590 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
1f5a0 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
1f5b0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
1f5c0 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
1f5d0 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
1f5e0 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
1f5f0 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
1f600 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
1f610 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
1f620 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
1f630 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f640 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
1f650 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
1f660 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
1f670 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
1f680 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
1f690 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
1f6a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
1f6b0 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
1f6c0 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
1f6d0 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
1f6e0 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
1f6f0 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
1f700 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
1f710 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
1f720 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
1f730 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1f740 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1f750 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
1f760 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
1f770 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
1f780 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
1f790 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f7a0 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
1f7b0 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
1f7c0 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
1f7d0 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
1f7e0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1f7f0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
1f800 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
1f810 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
1f820 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
1f830 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f840 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
1f850 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f860 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
1f870 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f880 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
1f890 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
1f8a0 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
1f8b0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
1f8c0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
1f8d0 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65  es;.  char *pFre
1f8e0 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  e;.  UnpackedRec
1f8f0 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20  ord *pIdxKey;.  
1f900 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1f910 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
1f920 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
1f930 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
1f940 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34   + sizeof(Mem)*4
1f950 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53   + 7];..#ifdef S
1f960 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28  QLITE_TEST.  if(
1f970 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
1f980 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71  _NoConflict ) sq
1f990 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
1f9a0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61  t++;.#endif..  a
1f9b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1f9c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1f9d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
1f9e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1f9f0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1fa00 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1fa10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1fa20 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65  ( pC!=0 );.#ifde
1fa30 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1fa40 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
1fa50 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
1fa60 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  f.  pIn3 = &aMem
1fa70 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
1fa80 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1fa90 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1faa0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1fab0 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a  );.  pFree = 0;.
1fac0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e    if( pOp->p4.i>
1fad0 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 ){.    r.pKeyI
1fae0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1faf0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1fb00 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
1fb10 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  i;.    r.aMem = 
1fb20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69  pIn3;.    for(ii
1fb30 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b  =0; ii<r.nField;
1fb40 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73   ii++){.      as
1fb50 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1fb60 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b  (&r.aMem[ii]) );
1fb70 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1fb80 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a  b(&r.aMem[ii]);.
1fb90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1fba0 42 55 47 0a 20 20 20 20 20 20 69 66 28 20 69 69  BUG.      if( ii
1fbb0 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43   ) REGISTER_TRAC
1fbc0 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72  E(pOp->p3+ii, &r
1fbd0 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64  .aMem[ii]);.#end
1fbe0 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64  if.    }.    pId
1fbf0 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c  xKey = &r;.  }el
1fc00 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20  se{.    pIdxKey 
1fc10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c  = sqlite3VdbeAll
1fc20 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  ocUnpackedRecord
1fc30 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b  (.        pC->pK
1fc40 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63  eyInfo, aTempRec
1fc50 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1fc60 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29  c), &pFree.    )
1fc70 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65  ;.    if( pIdxKe
1fc80 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
1fc90 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
1fca0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1fcb0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45 78  M_Blob );.    Ex
1fcc0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
1fcd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
1fce0 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e  ecordUnpack(pC->
1fcf0 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e  pKeyInfo, pIn3->
1fd00 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78  n, pIn3->z, pIdx
1fd10 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78  Key);.  }.  pIdx
1fd20 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20  Key->default_rc 
1fd30 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20  = 0;.  takeJump 
1fd40 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  = 0;.  if( pOp->
1fd50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e  opcode==OP_NoCon
1fd60 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20  flict ){.    /* 
1fd70 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e  For the OP_NoCon
1fd80 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61  flict opcode, ta
1fd90 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
1fda0 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  ny of the.    **
1fdb0 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72   input fields ar
1fdc0 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e  e NULL, since an
1fdd0 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c  y key with a NUL
1fde0 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a  L will not.    *
1fdf0 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20  * conflict */.  
1fe00 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70    for(ii=0; ii<p
1fe10 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20  IdxKey->nField; 
1fe20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28  ii++){.      if(
1fe30 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69   pIdxKey->aMem[i
1fe40 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  i].flags & MEM_N
1fe50 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74  ull ){.        t
1fe60 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20  akeJump = 1;.   
1fe70 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1fe80 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1fe90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fea0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1feb0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64  pC->pCursor, pId
1fec0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
1fed0 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
1fee0 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  ee(db, pFree);. 
1fef0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1ff00 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  OK ){.    break;
1ff10 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
1ff20 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
1ff30 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1ff40 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
1ff50 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
1ff60 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
1ff70 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1ff80 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1ff90 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1ffa0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
1ffb0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1ffc0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
1ffd0 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
1ffe0 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
1fff0 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
20000 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
20010 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
20020 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
20030 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
20040 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
20050 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
20060 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
20070 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
20080 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
20090 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
200a0 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
200b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
200c0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
200d0 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
200e0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
200f0 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
20100 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
20110 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
20120 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20  * keys).  P3 is 
20130 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  an integer rowid
20140 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f  .  If P1 does no
20150 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  t contain a reco
20160 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64  rd with.** rowid
20170 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d   P3 then jump im
20180 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
20190 20 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e    If P1 does con
201a0 74 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a  tain a record.**
201b0 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
201c0 68 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75  hen leave the cu
201d0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
201e0 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
201f0 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68   fall.** through
20200 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
20210 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
20220 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
20230 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
20240 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
20250 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
20260 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
20270 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
20280 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
20290 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
202a0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
202b0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
202c0 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
202d0 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
202e0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
202f0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
20300 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
20310 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
20320 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
20330 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
20340 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
20350 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
20360 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61  NoConflict.*/.ca
20370 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
20380 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
20390 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
203a0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
203b0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
203c0 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
203d0 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
203e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
203f0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
20400 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
20410 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
20420 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20430 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20440 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20450 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20460 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
20470 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
20480 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
20490 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73   0;.#endif.  ass
204a0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
204b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
204c0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
204d0 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  ==0 );.  pCrsr =
204e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
204f0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
20500 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
20510 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
20520 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
20530 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
20540 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
20550 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
20560 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
20570 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
20580 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
20590 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
205a0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
205b0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
205c0 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
205d0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
205e0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
205f0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
20600 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
20610 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21   res;.  if( res!
20620 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
20630 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
20640 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
20650 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
20660 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
20670 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
20680 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
20690 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
206a0 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
206b0 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
206c0 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
206d0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
206e0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
206f0 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
20700 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
20710 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
20720 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
20730 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
20740 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
20750 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
20760 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
20770 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20780 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20790 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
207a0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
207b0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
207c0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
207d0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
207e0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
207f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
20800 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62  >seqCount++;.  b
20810 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
20820 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
20830 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
20840 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
20850 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  wid.**.** Get a 
20860 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
20870 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
20880 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
20890 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
208a0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
208b0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
208c0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
208d0 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
208e0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
208f0 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
20900 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
20910 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
20920 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
20930 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
20940 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
20950 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
20960 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
20970 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
20980 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68   of this VDBE th
20990 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65  at holds .** the
209a0 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
209b0 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65  sly generated re
209c0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20  cord number. No 
209d0 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
209e0 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65  rs are.** allowe
209f0 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
20a00 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68  n this value. Wh
20a10 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
20a20 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
20a30 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45  m, .** an SQLITE
20a40 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
20a50 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
20a60 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
20a70 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
20a80 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
20a90 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
20aa0 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
20ab0 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
20ac0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
20ad0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
20ae0 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
20af0 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
20b00 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
20b10 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
20b20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
20b30 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
20b40 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20b50 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
20b60 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
20b70 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
20b80 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
20b90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
20ba0 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
20bb0 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
20bc0 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
20bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20be0 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
20bf0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
20c00 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
20c10 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
20c20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
20c30 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
20c40 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
20c50 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
20c60 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
20c70 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
20c80 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
20c90 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
20ca0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
20cb0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
20cc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20cd0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20ce0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20cf0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20d00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20d10 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
20d20 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72  ( NEVER(pC->pCur
20d30 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f  sor==0) ){.    /
20d40 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69  * The zero initi
20d50 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20  alization above 
20d60 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e  is all that is n
20d70 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65  eeded */.  }else
20d80 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
20d90 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
20da0 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
20db0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
20dc0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
20dd0 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
20de0 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
20df0 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
20e00 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
20e10 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
20e20 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
20e30 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
20e40 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
20e50 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
20e60 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
20e70 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
20e80 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
20e90 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
20ea0 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
20eb0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
20ec0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
20ed0 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
20ee0 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
20ef0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
20f00 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
20f10 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
20f20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
20f30 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
20f40 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
20f50 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
20f60 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
20f70 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
20f80 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
20f90 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
20fa0 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
20fb0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
20fc0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
20fd0 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
20fe0 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
20ff0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
21000 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
21010 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
21020 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20  E_32BIT_ROWID.# 
21030 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
21040 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65  ID 0x7fffffff.#e
21050 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20  lse.    /* Some 
21060 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61  compilers compla
21070 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e  in about constan
21080 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30  ts of the form 0
21090 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
210a0 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73  f..    ** Others
210b0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
210c0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
210d0 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c  fffLL.  The foll
210e0 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d  owing macro seem
210f0 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76  s.    ** to prov
21100 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  ide the constant
21110 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c   while making al
21120 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70  l compilers happ
21130 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65  y..    */.#   de
21140 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20  fine MAX_ROWID  
21150 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78  (i64)( (((u64)0x
21160 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c  7fffffff)<<32) |
21170 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66   (u64)0xffffffff
21180 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69   ).#endif..    i
21190 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f  f( !pC->useRando
211a0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
211b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
211c0 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
211d0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
211e0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
211f0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
21200 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
21210 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
21220 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
21230 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
21240 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
21250 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d  48074 */.      }
21260 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73  else{.        as
21270 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
21280 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
21290 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a  pC->pCursor) );.
212a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
212b0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
212c0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
212d0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
212e0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
212f0 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
21300 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
21310 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
21320 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58        if( v>=MAX
21330 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
21340 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
21350 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
21360 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
21370 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
21380 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
21390 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  7 */.        }. 
213a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69       }.    }..#i
213b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
213c0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
213d0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
213e0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65  ){.      /* Asse
213f0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
21400 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
21410 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  l. */.      asse
21420 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
21430 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46  .      if( p->pF
21440 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
21450 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
21460 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
21470 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
21480 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
21490 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
214a0 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
214b0 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
214c0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
214d0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
214e0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
214f0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46        pMem = &pF
21500 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
21510 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  p3];.      }else
21520 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  {.        /* Ass
21530 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
21540 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
21550 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
21560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
21570 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
21580 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
21590 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
215a0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ->p3];.        m
215b0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
215c0 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
215d0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
215e0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
215f0 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53   );..      REGIS
21600 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
21610 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
21620 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
21630 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
21640 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
21650 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
21660 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
21670 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
21680 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
21690 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
216a0 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
216b0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
216c0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
216d0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
216e0 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d  /* IMP: R-12275-
216f0 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20  61338 */.       
21700 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
21710 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
21720 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d  }.      if( v<pM
21730 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
21740 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
21750 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a  .i + 1;.      }.
21760 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
21770 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  = v;.    }.#endi
21780 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73  f.    if( pC->us
21790 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
217a0 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45        /* IMPLEME
217b0 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37  NTATION-OF: R-07
217c0 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65  677-41881 If the
217d0 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69   largest ROWID i
217e0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20  s equal to the. 
217f0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20       ** largest 
21800 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72  possible integer
21810 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
21820 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20  75807) then the 
21830 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a  database.      *
21840 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20  * engine starts 
21850 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65  picking positive
21860 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44   candidate ROWID
21870 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69  s at random unti
21880 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69  l.      ** it fi
21890 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20  nds one that is 
218a0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
218b0 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  sed. */.      as
218c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
218d0 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f   );  /* We canno
218e0 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72  t be in random r
218f0 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69  owid mode if thi
21900 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20  s is.           
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52    ** an AUTOINCR
21930 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a  EMENT table. */.
21940 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
21950 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
21960 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
21970 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
21980 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d  v);.        v &=
21990 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
219a0 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65   v++;  /* Ensure
219b0 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74   that v is great
219c0 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a  er than zero */.
219d0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28        }while(  (
219e0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
219f0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
21a00 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
21a10 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20   (u64)v,.       
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65            0, &re
21a50 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a  s))==SQLITE_OK).
21a60 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
21a70 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
21a80 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30      && (++cnt<10
21a90 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0));.      if( r
21aa0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
21ab0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
21ac0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
21ad0 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
21ae0 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
21af0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
21b00 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
21b10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
21b20 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
21b30 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
21b40 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
21b50 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
21b60 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
21b70 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21b80 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
21b90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
21ba0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21bb0 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
21bc0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
21bd0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
21be0 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32  =r[P3] data=r[P2
21bf0 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  ].**.** Write an
21c00 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
21c10 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
21c20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
21c30 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
21c40 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
21c50 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
21c60 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
21c70 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
21c80 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
21c90 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
21ca0 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
21cb0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
21cc0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
21cd0 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
21ce0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
21cf0 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
21d00 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
21d10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
21d20 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
21d30 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
21d40 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
21d50 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
21d60 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
21d70 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
21d80 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
21d90 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
21da0 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
21db0 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
21dc0 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
21dd0 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
21de0 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
21df0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
21e00 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
21e10 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
21e20 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
21e30 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21e40 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
21e50 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74   is set and if t
21e60 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
21e70 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70  the last seek op
21e80 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45  eration (OP_NotE
21e90 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63  xists) was a suc
21ea0 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a  cess, then this.
21eb0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  ** operation wil
21ec0 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  l not attempt to
21ed0 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70   find the approp
21ee0 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65  riate row before
21ef0 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e   doing.** the in
21f00 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e  sert but will in
21f10 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20  stead overwrite 
21f20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65  the row that the
21f30 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75   cursor is.** cu
21f40 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
21f50 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79   to.  Presumably
21f60 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e  , the prior OP_N
21f70 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a  otExists opcode.
21f80 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70  ** has already p
21f90 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
21fa0 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20  rsor correctly. 
21fb0 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
21fc0 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74  mization.** that
21fd0 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61   boosts performa
21fe0 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20  nce by avoiding 
21ff0 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e  redundant seeks.
22000 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
22010 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
22020 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
22030 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
22040 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
22050 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
22060 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
22070 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
22080 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
22090 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
220a0 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
220b0 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
220c0 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
220d0 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
220e0 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
220f0 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
22100 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
22110 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c  Table structure,
22120 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e   or may be NULL.
22130 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f   If it is .** no
22140 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
22150 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71   update-hook (sq
22160 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
22170 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
22180 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  d .** following 
22190 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
221a0 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
221b0 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
221c0 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
221d0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
221e0 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
221f0 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
22200 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
22210 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
22220 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
22230 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
22240 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
22250 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
22260 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
22270 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
22280 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
22290 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
222a0 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
222b0 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
222c0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
222d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
222e0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
222f0 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
22300 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
22310 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22320 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
22330 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
22340 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
22350 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
22360 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e  ** Synopsis:  in
22370 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50  tkey=P3 data=r[P
22380 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  2].**.** This wo
22390 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
223a0 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
223b0 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
223c0 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
223d0 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
223e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
223f0 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
22400 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
22410 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
22420 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
22430 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
22440 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
22450 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
22460 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
22470 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
22480 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
22490 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
224a0 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
224b0 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
224c0 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  d */.  i64 iKey;
224d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
224e0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
224f0 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
22500 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
22510 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ed */.  VdbeCurs
22520 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
22530 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
22540 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
22550 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
22560 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
22570 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
22580 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65  ro-bytes to appe
22590 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b  nd */.  int seek
225a0 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73  Result;   /* Res
225b0 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65  ult of prior see
225c0 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45  k or 0 if no USE
225d0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
225e0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
225f0 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61  *zDb;  /* databa
22600 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  se name - used b
22610 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  y the update hoo
22620 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  k */.  Table *pT
22630 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ab;      /* Tabl
22640 65 20 73 74 72 75 63 74 75 72 65 20 2d 20 75 73  e structure - us
22650 65 64 20 62 79 20 75 70 64 61 74 65 20 61 6e 64  ed by update and
22660 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
22670 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 20 3d 20  s */.  int op = 
22680 30 3b 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f  0;       /* Opco
22690 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
226a0 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
226b0 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
226c0 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
226d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
226e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
226f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22700 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22710 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
22720 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
22730 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22740 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22750 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22760 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
22770 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22780 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
22790 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
227a0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
227b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
227c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
227d0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  LE || pOp->p4typ
227e0 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a  e>=P4_STATIC );.
227f0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
22800 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
22810 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
22820 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
22830 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
22840 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
22850 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
22860 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
22870 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
22880 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
22890 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
228a0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
228b0 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  Key);.    iKey =
228c0 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
228d0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
228e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
228f0 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
22900 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33    iKey = pOp->p3
22910 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
22920 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
22930 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
22940 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
22950 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22960 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
22970 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
22980 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
22990 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
229a0 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
229b0 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20  Op->p4.pTab;.   
229c0 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20   op = ((pOp->p5 
229d0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
229e0 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
229f0 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
22a00 52 54 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  RT);.  }..#ifdef
22a10 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
22a20 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
22a30 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
22a40 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69  e-update hook, i
22a50 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64  f any */.  if( d
22a60 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c  b->xPreUpdateCal
22a70 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f 70  lback .   && pOp
22a80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
22a90 4c 45 0a 20 20 20 26 26 20 21 28 70 4f 70 2d 3e  LE.   && !(pOp->
22aa0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
22ab0 44 41 54 45 29 0a 20 20 20 26 26 20 48 61 73 52  DATE).   && HasR
22ac0 6f 77 69 64 28 70 54 61 62 29 0a 20 20 29 7b 0a  owid(pTab).  ){.
22ad0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
22ae0 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
22af0 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  pC, SQLITE_INSER
22b00 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b  T, zDb, pTab, iK
22b10 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  ey, pOp->p2);.  
22b20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  }.#endif..  if( 
22b30 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
22b40 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
22b50 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
22b60 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
22b70 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
22b80 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
22b90 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
22ba0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
22bb0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
22bc0 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b     pData->z = 0;
22bd0 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20  .    pData->n = 
22be0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
22bf0 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
22c00 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
22c10 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d  |MEM_Str) );.  }
22c20 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
22c30 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
22c40 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22c50 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
22c60 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
22c70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
22c80 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a  M_Zero ){.    nZ
22c90 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
22ca0 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
22cb0 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
22cc0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
22cd0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
22ce0 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
22cf0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22d00 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
22d10 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
22d20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
22d50 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
22d60 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
22d70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22d80 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
22d90 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
22da0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
22db0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
22dc0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
22dd0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
22de0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
22df0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22e00 6b 20 26 26 20 6f 70 20 26 26 20 48 61 73 52 6f  k && op && HasRo
22e10 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
22e20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22e30 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
22e40 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54  Arg, op, zDb, pT
22e50 61 62 2d 3e 7a 4e 61 6d 65 2c 20 69 4b 65 79 29  ab->zName, iKey)
22e60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22e70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
22e80 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ete P1 P2 P3 P4 
22e90 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
22ea0 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
22eb0 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
22ec0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
22ed0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
22ee0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
22ef0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
22f00 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
22f10 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
22f20 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
22f30 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
22f40 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
22f50 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
22f60 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
22f70 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
22f80 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
22f90 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
22fa0 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
22fb0 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
22fc0 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74  om within a Next
22fd0 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
22fe0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
22ff0 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
23000 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
23010 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
23020 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
23030 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
23040 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
23050 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
23060 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
23070 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
23080 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
23090 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
230a0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
230b0 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74  then it points t
230c0 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 74 75  o a Table strutu
230d0 72 65 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  re. In this case
230e0 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20   either .** the 
230f0 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70  update or pre-up
23100 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f  date hook, or bo
23110 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  th, may be invok
23120 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f  ed. The P1 curso
23130 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62  r must.** have b
23140 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75  een positioned u
23150 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
23160 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
23170 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  ng this opcode i
23180 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e  n .** this case.
23190 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69   Specifically, i
231a0 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
231b0 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64  red, the pre-upd
231c0 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20  ate hook is .** 
231d0 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73  invoked if P4 is
231e0 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75   not NULL. The u
231f0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e  pdate-hook is in
23200 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20  voked if one is 
23210 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20  configured, .** 
23220 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
23230 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  and the OPFLAG_N
23240 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73  CHANGE flag is s
23250 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  et in P2..**.** 
23260 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
23270 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
23280 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50  et in P2, then P
23290 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
232a0 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65  ddress.** of the
232b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
232c0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  t contains the v
232d0 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f  alue that the ro
232e0 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77  wid of the row w
232f0 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f  ill.** be set to
23300 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a   by the update..
23310 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
23320 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
23330 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
23340 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
23350 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
23360 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
23370 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
23380 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23390 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
233a0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
233b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
233c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
233d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
233e0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
233f0 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
23400 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
23410 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
23420 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
23430 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23440 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
23450 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
23460 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
23470 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
23480 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e  asRowid(pOp->p4.
23490 70 54 61 62 29 20 29 7b 0a 20 20 20 20 2f 2a 20  pTab) ){.    /* 
234a0 54 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69  The seek operati
234b0 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e  on that position
234c0 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72  ed the cursor pr
234d0 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65  ior to OP_Delete
234e0 20 77 69 6c 6c 0a 20 20 20 20 2a 2a 20 68 61 76   will.    ** hav
234f0 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70  e also set the p
23500 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
23510 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77  field to the row
23520 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74 68  id of the row th
23530 61 74 0a 20 20 20 20 2a 2a 20 69 73 20 62 65 69  at.    ** is bei
23540 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20  ng deleted */.  
23550 20 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a    i64 iKey = 0;.
23560 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
23570 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
23580 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20  sor, &iKey);.   
23590 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76   assert( pC->mov
235a0 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20  etoTarget==iKey 
235b0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
235c0 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
235d0 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70  e-hook or pre-up
235e0 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
235f0 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69  e invoked, set i
23600 4b 65 79 20 74 6f 20 0a 20 20 2a 2a 20 74 68 65  Key to .  ** the
23610 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
23620 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e  w being deleted.
23630 20 53 65 74 20 7a 44 62 20 61 6e 64 20 7a 54 61   Set zDb and zTa
23640 62 20 61 73 20 77 65 6c 6c 2e 0a 20 20 2a 2f 0a  b as well..  */.
23650 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
23660 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
23670 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
23680 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
23690 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
236a0 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
236b0 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
236c0 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
236d0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
236e0 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
236f0 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76  TE_HOOK.  /* Inv
23700 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61  oke the pre-upda
23710 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
23720 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62  red. */.  if( db
23730 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  ->xPreUpdateCall
23740 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
23750 7a 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54  z && HasRowid(pT
23760 61 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ab) ){.    asser
23770 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f  t( !(opflags & O
23780 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
23790 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  || (aMem[pOp->p3
237a0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ].flags & MEM_In
237b0 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  t) );.    sqlite
237c0 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f  3VdbePreUpdateHo
237d0 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20 20  ok(p, pC,.      
237e0 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46    (opflags & OPF
237f0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
23800 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
23810 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a  SQLITE_DELETE, .
23820 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61          zDb, pTa
23830 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  b, pC->movetoTar
23840 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f 70  get,.        pOp
23850 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a  ->p3.    );.  }.
23860 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 6f 70  #endif..  if( op
23870 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
23880 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 20  SNOOP ) break;. 
23890 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
238a0 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
238b0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
238c0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
238d0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
238e0 55 70 64 61 74 65 20 74 68 65 20 63 68 61 6e 67  Update the chang
238f0 65 2d 63 6f 75 6e 74 65 72 20 61 6e 64 20 69 6e  e-counter and in
23900 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
23910 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
23920 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61  . */.  if( opfla
23930 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  gs & OPFLAG_NCHA
23940 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  NGE ){.    p->nC
23950 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 61 73 73  hange++;.    ass
23960 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  ert( pOp->p4.z )
23970 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
23980 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
23990 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
239a0 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  & HasRowid(pTab)
239b0 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55   ){.      db->xU
239c0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
239d0 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51  ->pUpdateArg, SQ
239e0 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62  LITE_DELETE, zDb
239f0 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pTab->zName,. 
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76           pC->mov
23a20 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
23a30 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
23a40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
23a50 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
23a60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
23a70 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
23a80 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
23a90 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
23aa0 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
23ab0 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
23ac0 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
23ad0 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
23ae0 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
23af0 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
23b00 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
23b10 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
23b20 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
23b30 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
23b40 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
23b50 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
23b60 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
23b70 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
23b80 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
23b90 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
23ba0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23bb0 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
23bc0 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
23bd0 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b   Synopsis:  if k
23be0 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
23bf0 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
23c00 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
23c10 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
23c20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
23c30 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
23c40 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
23c50 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
23c60 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
23c70 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
23c80 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
23c90 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
23ca0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
23cb0 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
23cc0 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
23cd0 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
23ce0 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
23cf0 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
23d00 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
23d10 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
23d20 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
23d30 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
23d40 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
23d50 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
23d60 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
23d70 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
23d80 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
23d90 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
23da0 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
23db0 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
23dc0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
23dd0 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
23de0 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
23df0 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
23e00 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
23e10 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
23e20 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
23e30 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
23e40 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
23e50 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
23e60 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
23e70 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
23e80 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
23e90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23ea0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23eb0 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
23ec0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23ed0 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
23ee0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23ef0 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
23f00 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
23f10 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
23f20 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
23f30 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
23f40 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
23f50 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
23f60 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
23f70 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
23f80 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
23f90 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
23fa0 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
23fb0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
23fc0 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
23fd0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23fe0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23ff0 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20   current sorter 
24000 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20  data for sorter 
24010 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
24020 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c  en clear the col
24030 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65  umn header cache
24040 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a   on cursor P3..*
24050 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
24060 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65   is normally use
24070 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72   to move a recor
24080 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72  d out of the sor
24090 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20  ter and into.** 
240a0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
240b0 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f  is the source fo
240c0 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  r a pseudo-table
240d0 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20   cursor created 
240e0 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65  using.** OpenPse
240f0 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64  udo.  That pseud
24100 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  o-table cursor i
24110 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69  s the one that i
24120 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a  s identified by.
24130 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e  ** parameter P3.
24140 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50    Clearing the P
24150 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61  3 column cache a
24160 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f  s part of this o
24170 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75  pcode saves.** u
24180 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f  s from having to
24190 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74   issue a separat
241a0 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75  e NullRow instru
241b0 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74  ction to clear t
241c0 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61  hat cache..*/.ca
241d0 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61  se OP_SorterData
241e0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
241f0 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   *pC;..  pOut = 
24200 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
24210 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24220 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24230 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24240 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
24250 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
24260 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20  ey(pC, pOut);.  
24270 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49  assert( rc!=SQLI
24280 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e  TE_OK || (pOut->
24290 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
242a0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
242b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
242c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
242d0 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
242e0 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61  p->p3]->cacheSta
242f0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24300 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
24310 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
24320 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
24330 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
24340 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
24350 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
24360 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
24370 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
24380 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
24390 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
243a0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
243b0 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
243c0 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
243d0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
243e0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
243f0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
24400 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
24410 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
24420 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
24430 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
24440 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
24450 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
24460 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
24470 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
24480 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
24490 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
244a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
244b0 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
244c0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
244d0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
244e0 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
244f0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
24500 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
24510 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
24520 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
24530 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
24540 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
24550 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
24560 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
24570 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
24580 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
24590 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
245a0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
245b0 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
245c0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
245d0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
245e0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
245f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
24600 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
24610 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
24620 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24630 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
24640 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
24650 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
24660 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
24670 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
24680 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
24690 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
246a0 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
246b0 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
246c0 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
246d0 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
246e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
246f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24700 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24710 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24720 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24730 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
24740 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
24750 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
24760 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
24770 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
24780 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  ble==0 || pOp->o
24790 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
247a0 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
247b0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
247c0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
247d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
247e0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
247f0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
24800 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
24810 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
24820 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  >pCursor;..  /* 
24830 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e  The OP_RowKey an
24840 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  d OP_RowData opc
24850 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
24860 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
24870 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e  or.  ** OP_Rewin
24880 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
24890 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
248a0 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20  structions that 
248b0 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
248c0 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  .  ** the cursor
248d0 2e 20 20 49 66 20 74 68 69 73 20 77 68 65 72 65  .  If this where
248e0 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
248f0 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
24900 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
24910 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
24920 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
24930 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
24940 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
24950 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
24960 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
24970 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
24980 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
24990 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
249a0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
249b0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
249c0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
249d0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
249e0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
249f0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
24a00 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
24a10 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
24a20 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
24a30 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
24a40 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
24a50 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
24a60 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
24a70 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
24a80 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
24a90 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
24aa0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d  endif..  if( pC-
24ab0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
24ac0 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
24ad0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
24ae0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
24af0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
24b00 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
24b10 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
24b20 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
24b30 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
24b40 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
24b50 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
24b60 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
24b70 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
24b80 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
24b90 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
24ba0 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
24bb0 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
24bc0 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
24bd0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
24be0 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
24bf0 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
24c00 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
24c10 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
24c20 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
24c30 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
24c40 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
24c50 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
24c60 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
24c70 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
24c80 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
24c90 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73   n==0 );.  if( s
24ca0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
24cb0 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
24cc0 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a  , MAX(n,32)) ){.
24cd0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
24ce0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
24cf0 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
24d00 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
24d10 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
24d20 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
24d30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24d40 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
24d50 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
24d60 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
24d70 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
24d80 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
24d90 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
24da0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
24db0 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
24dc0 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
24dd0 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
24de0 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
24df0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
24e00 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
24e10 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
24e20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
24e30 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
24e40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
24e50 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
24e60 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
24e70 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
24e80 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
24e90 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
24ea0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
24eb0 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
24ec0 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
24ed0 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
24ee0 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
24ef0 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
24f00 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
24f10 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
24f20 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
24f30 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
24f40 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
24f50 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
24f60 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
24f70 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
24f80 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
24f90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
24fa0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
24fb0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
24fc0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24fd0 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
24fe0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
24ff0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
25000 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
25010 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  le;..  pOut = ou
25020 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
25030 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
25040 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25050 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25060 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25070 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25080 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25090 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
250a0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
250b0 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   || pC->nullRow 
250c0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  );.  if( pC->nul
250d0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74  lRow ){.    pOut
250e0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
250f0 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ll;.    break;. 
25100 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64   }else if( pC->d
25110 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b  eferredMoveto ){
25120 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76  .    v = pC->mov
25130 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64  etoTarget;.#ifnd
25140 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
25150 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65  IRTUALTABLE.  }e
25160 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61  lse if( pC->pVta
25170 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70  bCursor ){.    p
25180 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62  Vtab = pC->pVtab
25190 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
251a0 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
251b0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
251c0 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
251d0 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
251e0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
251f0 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75  owid(pC->pVtabCu
25200 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73  rsor, &v);.    s
25210 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
25220 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
25230 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
25240 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25250 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
25260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
25270 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
25280 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
25290 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
252a0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
252b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
252c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
252d0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
252e0 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  ){.      pOut->f
252f0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
25300 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
25310 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
25320 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
25330 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
25340 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
25350 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
25360 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
25370 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52  cause of CursorR
25380 65 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a  estore() above *
25390 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  /.  }.  pOut->u.
253a0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
253b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
253c0 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
253d0 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
253e0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
253f0 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
25400 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
25410 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
25420 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
25430 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
25440 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
25450 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
25460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
25470 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
25480 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
25490 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
254a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
254b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
254c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
254d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
254e0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
254f0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
25500 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25510 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
25520 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
25530 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
25540 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
25550 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
25560 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25570 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50  de: Last P1 P2 P
25580 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
25590 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
255a0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
255b0 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  or Prev instruct
255c0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
255d0 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
255e0 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
255f0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
25600 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
25610 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
25620 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
25630 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
25640 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
25650 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
25660 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
25670 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
25680 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
25690 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
256a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
256b0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
256c0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
256d0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
256e0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
256f0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
25700 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
25710 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
25720 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
25730 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
25740 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
25750 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
25760 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61   not Next..*/.ca
25770 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
25780 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
25790 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
257a0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
257b0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
257c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
257d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
257e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
257f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25800 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25810 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
25820 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
25830 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
25840 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
25850 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
25860 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
25870 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
25880 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
25890 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
258a0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
258b0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
258c0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
258d0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
258e0 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66   pOp->p3;.#ifdef
258f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25900 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
25910 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Last;.#endif.  i
25920 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a  f( pOp->p2>0 ){.
25930 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
25940 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
25950 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74     if( res ) got
25960 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
25970 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
25980 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
25990 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
259a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
259b0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
259c0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
259d0 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
259e0 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
259f0 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
25a00 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
25a10 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
25a20 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
25a30 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
25a40 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
25a50 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
25a60 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
25a70 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
25a80 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
25a90 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
25aa0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
25ab0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
25ac0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
25ad0 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
25ae0 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
25af0 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
25b00 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
25b10 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
25b20 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
25b30 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
25b40 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
25b50 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
25b60 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
25b70 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
25b80 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
25b90 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
25ba0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
25bb0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
25bc0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
25bd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
25be0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
25bf0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
25c00 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
25c10 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
25c20 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
25c30 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
25c40 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
25c50 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
25c60 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
25c70 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
25c80 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
25c90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
25ca0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
25cb0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
25cc0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
25cd0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
25ce0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
25cf0 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
25d00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
25d10 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
25d20 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
25d30 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
25d40 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
25d50 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
25d60 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
25d70 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
25d80 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
25d90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
25da0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
25db0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
25dc0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
25dd0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
25de0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
25df0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
25e00 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
25e10 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
25e20 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25e30 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
25e40 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
25e50 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
25e60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
25e70 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
25e80 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
25e90 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
25ea0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
25eb0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
25ec0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25ed0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25ee0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25ef0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25f10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
25f20 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
25f30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
25f40 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
25f50 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
25f60 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
25f70 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
25f80 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
25f90 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
25fa0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
25fb0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
25fc0 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
25fd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
25fe0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
25ff0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
26000 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
26010 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
26020 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
26030 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
26040 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
26050 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
26060 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26070 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
26080 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
26090 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
260a0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
260b0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
260c0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
260d0 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
260e0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
260f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26100 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
26110 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
26120 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
26130 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
26140 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
26150 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
26160 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
26170 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
26180 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
26190 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
261a0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
261b0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
261c0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
261d0 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
261e0 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
261f0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
26200 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
26210 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
26220 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
26230 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
26240 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
26250 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
26260 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
26270 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
26280 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
26290 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
262a0 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
262b0 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
262c0 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
262d0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
262e0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
262f0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
26300 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
26310 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
26320 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
26330 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
26340 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
26350 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
26360 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
26370 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
26380 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
26390 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
263a0 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
263b0 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
263c0 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
263d0 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
263e0 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
263f0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
26400 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
26410 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
26420 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
26430 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
26440 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
26450 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
26460 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
26470 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
26480 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
26490 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
264a0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
264b0 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
264c0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
264d0 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
264e0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
264f0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
26500 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
26510 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
26520 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
26530 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
26540 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
26550 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
26560 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
26570 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
26580 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
26590 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
265a0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
265b0 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
265c0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
265d0 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
265e0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
265f0 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
26600 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
26610 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
26620 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
26630 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
26640 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
26650 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
26660 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
26670 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
26680 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
26690 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
266a0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
266b0 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
266c0 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
266d0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
266e0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
266f0 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
26700 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
26710 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
26720 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
26730 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
26740 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
26750 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
26760 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
26770 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
26780 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
26790 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
267a0 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
267b0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
267c0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
267d0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
267e0 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
267f0 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
26800 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
26810 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
26820 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
26830 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
26840 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
26850 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
26860 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
26870 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
26880 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
26890 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
268a0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
268b0 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
268c0 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
268d0 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
268e0 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
268f0 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
26900 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
26910 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
26920 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
26930 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
26940 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
26950 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
26960 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
26970 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
26980 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
26990 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
269a0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
269b0 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
269c0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
269d0 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
269e0 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
269f0 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
26a00 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
26a10 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
26a20 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
26a30 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
26a40 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
26a50 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
26a60 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
26a70 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
26a80 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
26a90 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
26aa0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
26ab0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
26ac0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26ad0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26ae0 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  C) );.  res = 0;
26af0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
26b00 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
26b10 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67  , pC, &res);.  g
26b20 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
26b30 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65  ase OP_PrevIfOpe
26b40 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
26b50 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f  .case OP_NextIfO
26b60 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
26b70 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  */.  if( p->apCs
26b80 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20  r[pOp->p1]==0 ) 
26b90 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
26ba0 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65   through */.case
26bb0 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
26bc0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26bd0 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
26be0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
26bf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26c00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26c10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26c20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
26c30 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
26c40 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
26c50 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26c60 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d  1];.  res = pOp-
26c70 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
26c80 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
26c90 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
26ca0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
26cb0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
26cc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65   );.  assert( re
26cd0 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20  s==0 || (res==1 
26ce0 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  && pC->isTable==
26cf0 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  0) );.  testcase
26d00 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73  ( res==1 );.  as
26d10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26d20 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
26d30 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
26d40 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
26d50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26d60 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
26d70 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
26d80 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
26d90 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
26da0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26db0 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
26dc0 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
26dd0 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
26de0 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
26df0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26e00 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
26e10 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
26e20 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
26e30 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
26e40 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
26e50 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
26e60 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
26e70 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
26e80 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
26e90 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
26ea0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
26eb0 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
26ec0 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
26ed0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26ee0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
26ef0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
26f00 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26f10 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26f20 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
26f30 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
26f40 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
26f50 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
26f60 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
26f70 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
26f80 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26f90 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
26fa0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
26fb0 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26fc0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26fd0 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
26fe0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
26ff0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
27000 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
27010 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
27020 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75  xAdvance(pC->pCu
27030 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
27040 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
27050 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27060 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
27070 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
27080 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
27090 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
270a0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
270b0 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
270c0 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
270d0 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
270e0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
270f0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
27100 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
27110 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
27120 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
27130 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
27140 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  ow = 1;.  }.  go
27150 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
27160 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
27170 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
27180 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
27190 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
271a0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
271b0 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
271c0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
271d0 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
271e0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
271f0 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
27200 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
27210 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
27220 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
27230 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
27240 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
27250 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
27260 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
27270 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
27280 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
27290 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
272a0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
272b0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
272c0 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
272d0 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
272e0 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
272f0 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
27300 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
27310 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
27320 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
27330 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
27340 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
27350 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
27360 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
27370 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
27380 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
27390 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68  SULT bit set, th
273a0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
273b0 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20  st have.** just 
273c0 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74  done a seek to t
273d0 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68  he spot where th
273e0 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74  e new entry is t
273f0 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a  o be inserted..*
27400 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69  * This flag avoi
27410 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72  ds doing an extr
27420 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68  a seek..**.** Th
27430 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
27440 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
27450 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
27460 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
27470 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
27480 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
27490 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
274a0 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
274b0 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
274c0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
274d0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
274e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
274f0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
27500 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
27510 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
27520 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
27530 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27540 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27550 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27560 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27570 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27580 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
27590 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
275a0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
275b0 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20  sert) );.  pIn2 
275c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
275d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
275e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
275f0 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  ob );.  pCrsr = 
27600 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
27610 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
27620 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
27630 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
27640 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
27650 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27660 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
27670 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
27680 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  pIn2);.  if( rc=
27690 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
276a0 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
276b0 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  C) ){.      rc =
276c0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
276d0 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
276e0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
276f0 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d      nKey = pIn2-
27700 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d  >n;.      zKey =
27710 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
27720 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27730 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a  eInsert(pCrsr, z
27740 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
27750 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
27760 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e           ((pOp->
27770 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
27780 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
27790 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
277a0 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20  .          );.  
277b0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
277c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
277d0 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63  0 );.      pC->c
277e0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
277f0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a  HE_STALE;.    }.
27800 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27810 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
27820 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
27830 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
27840 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
27850 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
27860 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
27870 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
27880 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
27890 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
278a0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
278b0 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
278c0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
278d0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
278e0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
278f0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
27900 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
27910 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
27920 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
27930 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
27940 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
27950 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
27960 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27970 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
27980 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
27990 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
279a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
279b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
279c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
279d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
279e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
279f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
27a00 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
27a10 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
27a20 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
27a30 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
27a40 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
27a50 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
27a60 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
27a70 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65  )pOp->p3;.  r.de
27a80 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
27a90 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
27aa0 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20  Op->p2];.#ifdef 
27ab0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
27ac0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
27ad0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
27ae0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
27af0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
27b00 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
27b10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27b20 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
27b30 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
27b40 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  &res);.  if( rc=
27b50 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
27b60 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
27b70 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
27b80 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a  ete(pCrsr);.  }.
27b90 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
27ba0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
27bb0 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
27bc0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
27bd0 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
27be0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
27bf0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
27c00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
27c10 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57  2]=rowid.**.** W
27c20 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
27c30 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
27c40 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
27c50 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
27c60 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
27c70 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
27c80 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
27c90 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
27ca0 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
27cb0 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
27cc0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
27cd0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
27ce0 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
27cf0 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
27d00 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
27d10 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
27d20 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
27d30 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
27d40 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 43  /* out2 */.  BtC
27d50 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
27d60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27d70 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
27d80 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
27d90 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
27da0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27db0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27dc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27dd0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27de0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27df0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
27e00 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
27e10 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
27e20 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
27e30 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
27e40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
27e50 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61  sTable==0 );.  a
27e60 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
27e70 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
27e80 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65  .  /* sqlite3Vbe
27e90 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
27ea0 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66  can only fail if
27eb0 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
27ec0 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a  been deleted.  *
27ed0 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72  * out from under
27ee0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
27ef0 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61  at will never ha
27f00 70 70 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78  ppend for an Idx
27f10 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64  Rowid.  ** opcod
27f20 65 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56  e, hence the NEV
27f30 45 52 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65  ER() arround the
27f40 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65   check of the re
27f50 74 75 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f  turn value..  */
27f60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27f70 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
27f80 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
27f90 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
27fa0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27fb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
27fc0 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
27fd0 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30  ){.    rowid = 0
27fe0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
27ff0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
28000 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
28010 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
28020 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
28030 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72  id(db, pCrsr, &r
28040 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72  owid);.    if( r
28050 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
28060 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
28070 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28080 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
28090 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
280a0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
280b0 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65  M_Int;.  }.  bre
280c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
280d0 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
280e0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
280f0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
28100 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
28110 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
28120 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
28130 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
28140 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
28150 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
28160 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
28170 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
28180 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
28190 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
281a0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
281b0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
281c0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
281d0 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
281e0 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
281f0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
28200 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
28210 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
28220 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
28230 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
28240 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
28250 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
28260 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
28270 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
28280 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
28290 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
282a0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
282b0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
282c0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
282d0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
282e0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
282f0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
28300 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
28310 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
28320 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
28330 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
28340 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
28350 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
28360 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
28370 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
28380 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
28390 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
283a0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
283b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
283c0 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
283d0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
283e0 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
283f0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
28400 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
28410 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28420 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
28430 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
28440 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
28450 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
28460 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
28470 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
28480 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
28490 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
284a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
284b0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
284c0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
284d0 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
284e0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
284f0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
28500 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
28510 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
28520 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
28530 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
28540 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
28550 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
28560 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
28570 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
28580 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
28590 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
285a0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
285b0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
285c0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
285d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
285e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
285f0 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
28600 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
28610 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
28620 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
28630 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
28640 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
28650 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
28660 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
28670 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
28680 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
28690 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
286a0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
286b0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
286c0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
286d0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
286e0 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
286f0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
28700 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
28710 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
28720 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
28730 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
28740 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
28750 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
28760 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
28770 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
28780 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
28790 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
287a0 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
287b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
287c0 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
287d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
287e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
287f0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
28800 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
28810 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
28820 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
28830 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
28840 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
28850 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
28860 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28870 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28880 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
28890 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
288a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
288b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
288c0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
288d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
288e0 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73  Cursor!=0);.  as
288f0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
28900 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
28910 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28920 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
28930 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
28940 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
28950 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79  NT32 );.  r.pKey
28960 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
28970 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
28980 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
28990 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
289a0 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  ode<OP_IdxLT ){.
289b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
289c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
289d0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
289e0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
289f0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
28a00 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
28a10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
28a20 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
28a30 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
28a40 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
28a50 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
28a60 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
28a70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
28a80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
28a90 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
28aa0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
28ab0 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
28ac0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
28ad0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
28ae0 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20  ndif.  res = 0; 
28af0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
28b00 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
28b10 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
28b20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
28b30 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
28b40 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20  are(db, pC, &r, 
28b50 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
28b60 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28   (OP_IdxLE&1)==(
28b70 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28  OP_IdxLT&1) && (
28b80 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50  OP_IdxGE&1)==(OP
28b90 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69  _IdxGT&1) );.  i
28ba0 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26  f( (pOp->opcode&
28bb0 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
28bc0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28bd0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28be0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
28bf0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
28c00 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  ;.    res = -res
28c10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28c20 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28c30 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
28c40 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28c50 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxGT );.    res
28c60 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  ++;.  }.  VdbeBr
28c70 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c  anchTaken(res>0,
28c80 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  2);.  if( res>0 
28c90 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28ca0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
28cb0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
28cc0 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
28cd0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
28ce0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
28cf0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
28d00 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
28d10 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
28d20 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
28d30 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
28d40 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
28d50 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
28d60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28d70 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
28d80 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
28d90 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
28da0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
28db0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28dc0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
28dd0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
28de0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
28df0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
28e00 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
28e10 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
28e20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
28e30 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
28e40 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
28e50 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
28e60 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
28e70 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
28e80 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
28e90 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
28ea0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
28eb0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
28ec0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
28ed0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
28ee0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
28ef0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
28f00 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
28f10 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
28f20 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
28f30 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
28f40 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
28f50 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
28f60 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
28f70 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
28f80 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
28f90 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
28fa0 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
28fb0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
28fc0 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
28fd0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
28fe0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
28ff0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
29000 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
29010 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
29020 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
29030 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
29040 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
29050 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
29060 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
29070 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
29080 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
29090 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
290a0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
290b0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
290c0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
290d0 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62  M_Null;.  if( db
290e0 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62  ->nVdbeRead > db
290f0 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b  ->nVDestroy+1 ){
29100 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
29110 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
29120 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
29130 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
29140 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
29150 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
29160 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
29170 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
29180 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
29190 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
291a0 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
291b0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
291c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
291d0 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
291e0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
291f0 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
29200 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
29210 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
29220 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
29230 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
29240 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
29250 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
29260 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
29270 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
29280 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
29290 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
292a0 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
292b0 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
292c0 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
292d0 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
292e0 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
292f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
29300 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
29310 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
29320 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
29330 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
29340 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
29350 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
29360 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
29370 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
29380 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
29390 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
293a0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
293b0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
293c0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
293d0 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
293e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
293f0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
29400 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
29410 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
29420 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
29430 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
29440 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
29450 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
29460 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
29470 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
29480 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
29490 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
294a0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
294b0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
294c0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
294d0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
294e0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
294f0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
29500 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
29510 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
29520 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
29530 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
29540 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
29550 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
29560 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
29570 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
29580 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
29590 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
295a0 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
295b0 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
295c0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
295d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
295e0 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
295f0 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
29600 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
29610 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
29620 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
29630 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
29640 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
29650 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
29660 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
29670 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
29680 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
29690 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
296a0 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
296b0 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
296c0 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68  nChange;. .  nCh
296d0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
296e0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
296f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29700 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
29710 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32  reeMask, pOp->p2
29720 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
29730 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
29740 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
29750 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
29760 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
29770 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
29780 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
29790 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
297a0 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
297b0 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
297c0 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
297d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
297e0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
297f0 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
29800 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
29810 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
29820 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
29830 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
29840 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  e;.    }.  }.  b
29850 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29860 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
29870 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
29880 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
29890 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
298a0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
298b0 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
298c0 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
298d0 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
298e0 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
298f0 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
29900 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
29910 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
29920 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
29930 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
29940 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
29950 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
29960 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29970 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
29980 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29990 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
299a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
299b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
299c0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
299d0 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65 72   if( pC->pSorter
299e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
299f0 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64  dbeSorterReset(d
29a00 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b  b, pC->pSorter);
29a10 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
29a20 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65  sert( pC->isEphe
29a30 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20  meral );.    rc 
29a40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
29a50 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72  earTableOfCursor
29a60 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
29a70 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
29a80 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
29a90 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
29aa0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
29ab0 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
29ac0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
29ad0 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
29ae0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
29af0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
29b00 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
29b10 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
29b20 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
29b30 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
29b40 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
29b50 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
29b60 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
29b70 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
29b80 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
29b90 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
29ba0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
29bb0 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
29bc0 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
29bd0 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
29be0 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
29bf0 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
29c00 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
29c10 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
29c20 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
29c30 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
29c40 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
29c50 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
29c60 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
29c70 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
29c80 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
29c90 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
29ca0 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
29cb0 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
29cc0 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
29cd0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
29ce0 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
29cf0 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
29d00 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
29d10 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
29d20 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
29d30 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
29d40 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
29d50 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
29d60 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
29d70 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
29d80 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
29d90 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
29da0 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
29db0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
29dc0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
29dd0 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
29de0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
29df0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
29e00 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
29e10 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
29e20 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
29e30 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
29e40 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
29e50 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
29e60 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ;.  pgno = 0;.  
29e70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29e80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
29e90 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
29ea0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
29eb0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
29ec0 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
29ed0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
29ee0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
29ef0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
29f00 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
29f10 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  t!=0 );.  if( pO
29f20 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72  p->opcode==OP_Cr
29f30 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20  eateTable ){.   
29f40 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45   /* flags = BTRE
29f50 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20  E_INTKEY; */.   
29f60 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
29f70 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  NTKEY;.  }else{.
29f80 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
29f90 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20  E_BLOBKEY;.  }. 
29fa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
29fb0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
29fc0 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66  b->pBt, &pgno, f
29fd0 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  lags);.  pOut->u
29fe0 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65  .i = pgno;.  bre
29ff0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a000 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
2a010 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2a020 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
2a030 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
2a040 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
2a050 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
2a060 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
2a070 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
2a080 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a  lause P4. .**.**
2a090 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
2a0a0 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
2a0b0 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
2a0c0 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
2a0d0 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
2a0e0 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
2a0f0 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
2a100 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
2a110 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
2a120 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
2a130 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63  {.  int iDb;.  c
2a140 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74  onst char *zMast
2a150 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  er;.  char *zSql
2a160 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
2a170 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79  tData;..  /* Any
2a180 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2a190 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ent that invokes
2a1a0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
2a1b0 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20  l hold mutexes. 
2a1c0 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72   ** on every btr
2a1d0 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70  ee.  This is a p
2a1e0 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20  rerequisite for 
2a1f0 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73  invoking .  ** s
2a200 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
2a210 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ck()..  */.#ifde
2a220 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2a230 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c   for(iDb=0; iDb<
2a240 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
2a250 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
2a260 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==1 || sqlite3Bt
2a270 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
2a280 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
2a290 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
2a2a0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
2a2b0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
2a2c0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
2a2d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48  );.  assert( DbH
2a2e0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
2a2f0 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
2a300 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65  ded) );.  /* Use
2a310 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74  d to be a condit
2a320 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a  ional */ {.    z
2a330 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
2a340 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
2a350 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
2a360 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
2a370 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
2a380 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
2a390 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
2a3a0 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
2a3b0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2a3c0 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
2a3d0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
2a3e0 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
2a3f0 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
2a400 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
2a410 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
2a420 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
2a430 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
2a440 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
2a450 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2a460 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
2a470 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2a480 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
2a490 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
2a4a0 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
2a4b0 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
2a4c0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
2a4d0 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
2a4e0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
2a4f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2a500 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
2a510 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
2a520 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
2a530 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
2a540 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
2a550 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
2a560 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
2a570 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
2a580 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
2a590 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
2a5a0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71   }.  if( rc ) sq
2a5b0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
2a5c0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
2a5d0 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
2a5e0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
2a5f0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2a600 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
2a610 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
2a620 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2a630 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
2a640 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
2a650 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
2a660 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
2a670 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
2a680 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
2a690 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
2a6a0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
2a6b0 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
2a6c0 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
2a6d0 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
2a6e0 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
2a6f0 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
2a700 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
2a710 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
2a720 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
2a730 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
2a740 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
2a750 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2a760 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
2a770 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
2a780 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
2a790 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
2a7a0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
2a7b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a7c0 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
2a7d0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
2a7e0 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
2a7f0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2a800 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2a810 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2a820 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2a830 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
2a840 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2a850 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2a860 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2a870 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
2a880 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2a890 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2a8a0 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2a8b0 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2a8c0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2a8d0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2a8e0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2a8f0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2a900 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2a910 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
2a920 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
2a930 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
2a940 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
2a950 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2a960 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a970 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
2a980 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2a990 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2a9a0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2a9b0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2a9c0 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2a9d0 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
2a9e0 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2a9f0 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2aa00 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
2aa10 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
2aa20 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2aa30 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2aa40 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65  code).** in orde
2aa50 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
2aa60 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2aa70 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2aa80 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2aa90 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2aaa0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2aab0 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
2aac0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2aad0 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
2aae0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2aaf0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2ab00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
2ab10 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
2ab20 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2ab30 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2ab40 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2ab50 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2ab60 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2ab70 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
2ab80 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2ab90 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2aba0 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
2abb0 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
2abc0 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2abd0 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2abe0 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
2abf0 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
2ac00 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2ac10 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2ac20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2ac30 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2ac40 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2ac50 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
2ac60 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2ac70 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2ac80 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
2ac90 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2aca0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
2acb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
2acc0 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
2acd0 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
2ace0 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
2acf0 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
2ad00 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
2ad10 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
2ad20 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
2ad30 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
2ad40 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
2ad50 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
2ad60 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
2ad70 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
2ad80 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
2ad90 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
2ada0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2adb0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2adc0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2add0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
2ade0 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
2adf0 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
2ae00 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
2ae10 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
2ae20 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
2ae30 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
2ae40 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
2ae50 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
2ae60 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
2ae70 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
2ae80 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
2ae90 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
2aea0 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
2aeb0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2aec0 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
2aed0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2aee0 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
2aef0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
2af00 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
2af10 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
2af20 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
2af30 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
2af40 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
2af50 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
2af60 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
2af70 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2af80 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
2af90 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2afa0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
2afb0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
2afc0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
2afd0 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
2afe0 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
2aff0 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
2b000 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
2b010 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2b020 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
2b030 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
2b040 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
2b050 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
2b060 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
2b070 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
2b080 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
2b090 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
2b0a0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
2b0b0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
2b0c0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
2b0d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
2b0e0 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
2b0f0 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
2b100 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
2b110 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
2b120 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
2b130 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
2b140 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
2b150 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2b160 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ng */..  assert(
2b170 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
2b180 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
2b190 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
2b1a0 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
2b1b0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2b1c0 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
2b1d0 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
2b1e0 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
2b1f0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2b200 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b210 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2b220 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2b230 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72  rsor) );.  pnErr
2b240 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2b250 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
2b260 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
2b270 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
2b280 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2b290 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2b2a0 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
2b2b0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b2c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
2b2d0 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
2b2e0 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
2b2f0 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
2b300 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
2b310 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
2b320 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
2b330 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
2b340 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2b350 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2b360 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2b370 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
2b380 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
2b390 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
2b3a0 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f  Op->p5].pBt, aRo
2b3b0 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  ot, nRoot,.     
2b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
2b3e0 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45  )pnErr->u.i, &nE
2b3f0 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  rr);.  sqlite3Db
2b400 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b  Free(db, aRoot);
2b410 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
2b420 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
2b430 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2b440 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
2b450 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
2b460 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
2b470 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
2b480 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2b490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
2b4a0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2b4b0 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
2b4c0 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
2b4d0 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
2b4e0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2b4f0 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
2b500 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2b510 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
2b520 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2b530 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2b540 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2b550 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
2b560 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
2b570 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
2b580 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77  * Synopsis:  row
2b590 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
2b5a0 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
2b5b0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
2b5c0 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
2b5d0 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20   into a boolean 
2b5e0 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e  index.** held in
2b5f0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2b600 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
2b610 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
2b620 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
2b630 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2b640 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
2b650 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
2b660 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b670 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
2b680 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2b690 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
2b6a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2b6b0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
2b6c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2b6d0 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2b6e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b6f0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2b700 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2b710 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2b720 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2b730 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
2b740 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2b750 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2b760 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
2b770 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2b780 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
2b790 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2b7a0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
2b7b0 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  rowset(P1).**.**
2b7c0 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
2b7d0 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
2b7e0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2b7f0 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
2b800 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
2b810 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
2b820 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
2b830 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
2b840 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
2b850 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
2b860 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2b870 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
2b880 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
2b890 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
2b8a0 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
2b8b0 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
2b8c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b8d0 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
2b8e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2b8f0 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
2b900 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
2b910 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2b920 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
2b930 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
2b940 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
2b950 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
2b960 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2b970 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
2b980 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
2b990 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2b9a0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2b9b0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
2b9c0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
2b9d0 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
2b9e0 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
2b9f0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2ba00 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
2ba10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2ba20 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
2ba30 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
2ba40 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2ba50 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2ba60 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2ba70 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
2ba80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2ba90 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
2baa0 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
2bab0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
2bac0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
2bad0 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
2bae0 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
2baf0 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
2bb00 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
2bb10 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
2bb20 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
2bb30 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
2bb40 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
2bb50 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
2bb60 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
2bb70 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
2bb80 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
2bb90 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
2bba0 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
2bbb0 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
2bbc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
2bbd0 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
2bbe0 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
2bbf0 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
2bc00 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
2bc10 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
2bc20 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
2bc30 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
2bc40 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
2bc50 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
2bc60 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
2bc70 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
2bc80 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
2bc90 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
2bca0 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
2bcb0 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
2bcc0 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
2bcd0 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
2bce0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
2bcf0 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
2bd00 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
2bd10 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
2bd20 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
2bd30 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
2bd40 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
2bd50 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
2bd60 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
2bd70 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
2bd80 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
2bd90 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
2bda0 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
2bdb0 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
2bdc0 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
2bdd0 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
2bde0 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
2bdf0 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
2be00 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
2be10 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
2be20 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
2be30 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
2be40 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
2be50 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
2be60 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
2be70 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
2be80 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
2be90 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2bea0 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
2beb0 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
2bec0 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
2bed0 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
2bee0 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
2bef0 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
2bf00 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2bf10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2bf20 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
2bf30 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
2bf40 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
2bf50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2bf60 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
2bf70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
2bf80 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2bf90 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
2bfa0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
2bfb0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2bfc0 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
2bfd0 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
2bfe0 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
2bff0 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
2c000 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
2c010 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
2c020 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
2c030 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
2c040 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2c050 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2c060 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c070 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2c080 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2c090 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2c0a0 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2c0b0 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
2c0c0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2c0d0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2c0e0 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
2c0f0 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
2c100 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
2c110 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
2c120 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
2c130 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65  ->u.pRowSet, iSe
2c140 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2c150 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2c160 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
2c170 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
2c180 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2c190 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65  2;.  }.  if( iSe
2c1a0 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
2c1b0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2c1c0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2c1d0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
2c1e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2c1f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c200 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
2c210 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
2c220 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2c230 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
2c240 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
2c250 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
2c260 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
2c270 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
2c280 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2c290 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
2c2a0 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
2c2b0 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
2c2c0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
2c2d0 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
2c2e0 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
2c2f0 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
2c300 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
2c310 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2c320 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2c330 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
2c340 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
2c350 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
2c360 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
2c370 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
2c380 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2c390 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
2c3a0 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
2c3b0 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
2c3c0 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
2c3d0 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
2c3e0 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
2c3f0 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
2c400 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
2c410 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
2c420 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2c430 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
2c440 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
2c450 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  rogram..**.** If
2c460 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P5 is non-zero,
2c470 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2c480 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69  program invocati
2c490 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  on is enabled..*
2c4a0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
2c4b0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2c4c0 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
2c4d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2c4e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
2c4f0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
2c500 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2c510 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
2c520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2c530 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
2c540 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
2c550 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2c560 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
2c570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2c580 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
2c590 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
2c5a0 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
2c5b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2c5c0 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
2c5d0 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
2c5e0 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
2c5f0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
2c600 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
2c610 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
2c620 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
2c630 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
2c640 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
2c650 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
2c660 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
2c670 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
2c680 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
2c690 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
2c6a0 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
2c6b0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
2c6c0 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
2c6d0 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
2c6e0 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
2c6f0 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
2c700 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2c710 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2c720 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
2c730 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
2c740 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
2c750 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2c760 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2c770 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
2c780 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
2c790 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
2c7a0 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
2c7b0 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
2c7c0 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
2c7d0 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
2c7e0 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
2c7f0 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
2c800 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
2c810 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
2c820 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
2c830 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
2c840 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
2c850 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
2c860 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2c870 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
2c880 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
2c890 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
2c8a0 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
2c8b0 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
2c8c0 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
2c8d0 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
2c8e0 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
2c8f0 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
2c900 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
2c910 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
2c920 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
2c930 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
2c940 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
2c950 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
2c960 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
2c970 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
2c980 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
2c990 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
2c9a0 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
2c9b0 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
2c9c0 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
2c9d0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
2c9e0 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
2c9f0 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
2ca00 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2ca10 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
2ca20 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
2ca30 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2ca40 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
2ca50 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
2ca60 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
2ca70 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
2ca80 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
2ca90 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
2caa0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2cab0 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
2cac0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
2cad0 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20  too many levels 
2cae0 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72  of trigger recur
2caf0 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61  sion");.    brea
2cb00 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67  k;.  }..  /* Reg
2cb10 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65  ister pRt is use
2cb20 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d  d to store the m
2cb30 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74  emory required t
2cb40 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65  o save the state
2cb50 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72  .  ** of the cur
2cb60 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e  rent program, an
2cb70 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  d the memory req
2cb80 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uired at runtime
2cb90 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a   to execute.  **
2cba0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2cbb0 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72  gram. If this tr
2cbc0 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66  igger has been f
2cbd0 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65  ired before, the
2cbe0 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61  n pRt .  ** is a
2cbf0 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
2cc00 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
2cc10 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
2cc20 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28  zed.  */.  if( (
2cc30 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  pRt->flags&MEM_F
2cc40 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  rame)==0 ){.    
2cc50 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
2cc60 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
2cc70 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
2cc80 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
2cc90 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
2cca0 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
2ccb0 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
2ccc0 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
2ccd0 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
2cce0 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
2ccf0 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
2cd00 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
2cd10 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
2cd20 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
2cd30 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
2cd40 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
2cd50 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
2cd60 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
2cd70 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
2cd80 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
2cd90 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42  am->nCsr;.    nB
2cda0 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
2cdb0 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2cdd0 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
2cde0 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
2cdf0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
2ce00 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
2ce10 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20  ursor *).       
2ce20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61         + pProgra
2ce30 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f  m->nOnce * sizeo
2ce40 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d  f(u8);.    pFram
2ce50 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  e = sqlite3DbMal
2ce60 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74  locZero(db, nByt
2ce70 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72  e);.    if( !pFr
2ce80 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ame ){.      got
2ce90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
2cea0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2ceb0 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a  emRelease(pRt);.
2cec0 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d      pRt->flags =
2ced0 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20   MEM_Frame;.    
2cee0 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20  pRt->u.pFrame = 
2cef0 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72  pFrame;..    pFr
2cf00 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20  ame->v = p;.    
2cf10 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2cf20 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46  m = nMem;.    pF
2cf30 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2cf40 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  = pProgram->nCsr
2cf50 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63  ;.    pFrame->pc
2cf60 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
2cf70 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Op);.    pFrame-
2cf80 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
2cf90 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
2cfa0 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
2cfb0 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
2cfc0 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
2cfd0 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
2cfe0 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
2cff0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
2d000 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
2d010 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
2d020 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
2d030 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
2d040 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65  oken;.    pFrame
2d050 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->aOnceFlag = p-
2d060 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20  >aOnceFlag;.    
2d070 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61  pFrame->nOnceFla
2d080 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  g = p->nOnceFlag
2d090 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2d0a0 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
2d0b0 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d  STATUS.    pFram
2d0c0 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61  e->anExec = p->a
2d0d0 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20  nExec;.#endif.. 
2d0e0 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
2d0f0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2d100 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2d110 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
2d120 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
2d130 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
2d140 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
2d150 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
2d160 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
2d170 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
2d180 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
2d190 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
2d1a0 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20  pRt->u.pFrame;. 
2d1b0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2d1c0 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72  ram->nMem+pProgr
2d1d0 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2d1e0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20  ->nChildMem );. 
2d1f0 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67     assert( pProg
2d200 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2d210 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a  e->nChildCsr );.
2d220 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74      assert( (int
2d230 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46  )(pOp - aOp)==pF
2d240 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
2d250 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
2d260 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
2d270 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
2d280 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
2d290 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
2d2a0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
2d2b0 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
2d2c0 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61    pFrame->nDbCha
2d2d0 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68  nge = p->db->nCh
2d2e0 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  ange;.  p->nChan
2d2f0 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
2d300 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
2d310 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
2d320 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
2d330 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d  Frame)[-1];.  p-
2d340 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
2d350 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
2d360 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
2d370 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2d380 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
2d390 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
2d3a0 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a  Mem[p->nMem+1];.
2d3b0 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
2d3c0 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
2d3d0 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
2d3e0 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61  ram->nOp;.  p->a
2d3f0 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a  OnceFlag = (u8 *
2d400 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43  )&p->apCsr[p->nC
2d410 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e  ursor];.  p->nOn
2d420 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61  ceFlag = pProgra
2d430 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66  m->nOnce;.#ifdef
2d440 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
2d450 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
2d460 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a   p->anExec = 0;.
2d470 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26  #endif.  pOp = &
2d480 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65  aOp[-1];.  memse
2d490 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20  t(p->aOnceFlag, 
2d4a0 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29  0, p->nOnceFlag)
2d4b0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
2d4c0 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
2d4d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2d4e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2d4f0 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
2d500 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
2d510 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
2d520 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
2d530 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
2d540 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
2d550 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
2d560 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2d570 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
2d580 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
2d590 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
2d5a0 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
2d5b0 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
2d5c0 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
2d5d0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
2d5e0 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
2d5f0 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
2d600 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
2d610 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
2d620 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
2d630 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
2d640 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
2d650 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
2d660 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2d670 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
2d680 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
2d690 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
2d6a0 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
2d6b0 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
2d6c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
2d6d0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
2d6e0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2d6f0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2d700 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f    Mem *pIn;.  pO
2d710 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2d720 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
2d730 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
2d740 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
2d750 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2d760 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
2d770 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
2d780 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
2d790 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
2d7a0 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
2d7b0 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
2d7c0 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
2d7d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d7e0 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
2d7f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d800 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
2d810 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
2d820 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d830 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
2d840 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
2d850 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
2d860 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
2d870 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
2d880 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
2d890 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
2d8a0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2d8b0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2d8c0 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
2d8d0 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
2d8e0 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
2d8f0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2d900 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
2d910 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
2d920 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
2d930 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2d940 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
2d950 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2d960 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
2d970 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
2d980 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
2d990 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
2d9a0 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
2d9b0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2d9c0 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2d9d0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
2d9e0 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
2d9f0 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
2da00 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
2da10 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
2da20 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
2da30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2da40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
2da50 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
2da60 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2da70 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
2da80 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
2da90 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
2daa0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
2dab0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2dac0 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
2dad0 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
2dae0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2daf0 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
2db00 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2db10 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
2db20 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2db30 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2db40 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
2db50 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2db60 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2db70 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
2db80 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
2db90 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
2dba0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
2dbb0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
2dbc0 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
2dbd0 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
2dbe0 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
2dbf0 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
2dc00 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
2dc10 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
2dc20 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2dc30 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2dc40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
2dc50 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
2dc60 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
2dc70 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2dc80 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2dc90 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
2dca0 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
2dcb0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2dcc0 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
2dcd0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2dce0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2dcf0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2dd00 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2dd10 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
2dd20 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
2dd30 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
2dd40 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2dd50 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2dd60 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
2dd70 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
2dd80 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2dd90 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
2dda0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
2ddb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ddc0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2ddd0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2dde0 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
2ddf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2de00 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
2de10 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
2de20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2de30 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
2de40 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
2de50 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
2de60 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
2de70 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
2de80 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
2de90 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
2dea0 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
2deb0 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
2dec0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
2ded0 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
2dee0 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
2def0 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
2df00 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2df10 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
2df20 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
2df30 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
2df40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
2df50 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2df60 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2df70 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
2df80 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
2df90 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
2dfa0 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
2dfb0 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
2dfc0 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
2dfd0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2dfe0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2dff0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
2e000 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
2e010 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2e020 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
2e030 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2e040 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
2e050 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2e060 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
2e070 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
2e080 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2e090 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
2e0a0 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
2e0b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e0c0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
2e0d0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2e0e0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
2e0f0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
2e100 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
2e110 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
2e120 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
2e130 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
2e140 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
2e150 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e160 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2e170 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
2e180 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
2e190 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2e1a0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
2e1b0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2e1c0 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
2e1d0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
2e1e0 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  r..** If the val
2e1f0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2e200 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
2e210 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e  r, jump to P2 an
2e220 64 0a 2a 2a 20 61 64 64 20 74 68 65 20 6c 69 74  d.** add the lit
2e230 65 72 61 6c 20 76 61 6c 75 65 20 50 33 20 74 6f  eral value P3 to
2e240 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2e250 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69  .** If the initi
2e260 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  al value of regi
2e270 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2e280 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65  than 1, then the
2e290 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63  .** value is unc
2e2a0 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72  hanged and contr
2e2b0 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67  ol passes throug
2e2c0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2e2d0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2e2e0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
2e2f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2e300 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2e310 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2e320 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2e330 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2e340 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2e350 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20  n( pIn1->u.i>0, 
2e360 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2e370 75 2e 69 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d  u.i>0 ) goto jum
2e380 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2e390 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2e3a0 49 66 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a  IfNeg P1 P2 P3 *
2e3b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e3c0 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b  r[P1]+=P3, if r[
2e3d0 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  P1]<0 goto P2.**
2e3e0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
2e3f0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2e400 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
2e410 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20  teral P3 to the 
2e420 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69  value in.** regi
2e430 73 74 65 72 20 50 31 20 74 68 65 6e 20 69 66 20  ster P1 then if 
2e440 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2e450 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
2e460 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70   than zero, jump
2e470 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65   to P2. .*/.case
2e480 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20   OP_IfNeg: {    
2e490 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2e4a0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2e4b0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2e4c0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2e4d0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2e4e0 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
2e4f0 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e  ->p3;.  VdbeBran
2e500 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2e510 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
2e520 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 20 67 6f 74  In1->u.i<0 ) got
2e530 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2e540 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e550 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50  ode: IfNotZero P
2e560 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2e570 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
2e580 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2b  ]!=0 then r[P1]+
2e590 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  =P3, goto P2.**.
2e5a0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2e5b0 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2e5c0 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
2e5d0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
2e5e0 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69  ter P1 is.** ini
2e5f0 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20  tially nonzero, 
2e600 74 68 65 6e 20 61 64 64 20 50 33 20 74 6f 20 50  then add P3 to P
2e610 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32  1 and jump to P2
2e620 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
2e630 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c  1 is.** initiall
2e640 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74  y zero, leave it
2e650 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66   unchanged and f
2e660 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
2e670 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72  case OP_IfNotZer
2e680 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
2e690 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2e6a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e6b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e6c0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2e6d0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
2e6e0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2e6f0 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
2e700 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20  In1->u.i ){.    
2e710 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2e720 70 2d 3e 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f  p->p3;.     goto
2e730 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2e740 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e750 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70  Opcode: DecrJump
2e760 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
2e770 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2e780 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f   (--r[P1])==0 go
2e790 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2e7a0 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c  ster P1 must hol
2e7b0 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44  d an integer.  D
2e7c0 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
2e7d0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
2e7e0 31 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  1.** then jump t
2e7f0 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20  o P2 if the new 
2e800 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79  value is exactly
2e810 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f   zero..*/.case O
2e820 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20  P_DecrJumpZero: 
2e830 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20  {      /* jump, 
2e840 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2e850 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2e860 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2e870 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2e880 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a  .  pIn1->u.i--;.
2e890 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2e8a0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20  n(pIn1->u.i==0, 
2e8b0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2e8c0 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  u.i==0 ) goto ju
2e8d0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
2e8e0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
2e8f0 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50  : JumpZeroIncr P
2e900 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2e910 6e 6f 70 73 69 73 3a 20 69 66 20 28 72 5b 50 31  nopsis: if (r[P1
2e920 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50  ]++)==0 ) goto P
2e930 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  2.**.** The regi
2e940 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2e950 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2e960 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31    If register P1
2e970 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a   is initially.**
2e980 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
2e990 20 74 6f 20 50 32 2e 20 20 49 6e 63 72 65 6d 65   to P2.  Increme
2e9a0 6e 74 20 72 65 67 69 73 74 65 72 20 50 31 20 72  nt register P1 r
2e9b0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
2e9c0 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74  ther or.** not t
2e9d0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2e9e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d  ..*/.case OP_Jum
2e9f0 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20  pZeroIncr: {    
2ea00 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2ea10 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2ea20 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2ea30 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2ea40 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2ea50 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ea60 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
2ea70 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 75  ;.  if( (pIn1->u
2ea80 2e 69 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20  .i++)==0 ) goto 
2ea90 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
2eaa0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2eab0 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
2eac0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2ead0 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
2eae0 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
2eaf0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2eb00 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2eb10 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2eb20 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2eb30 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2eb40 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2eb50 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2eb60 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
2eb70 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
2eb80 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
2eb90 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
2eba0 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
2ebb0 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
2ebc0 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
2ebd0 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
2ebe0 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
2ebf0 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
2ec00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2ec10 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
2ec20 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2ec30 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
2ec40 65 63 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73  ec;.  Mem t;.  s
2ec50 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
2ec60 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
2ec70 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
2ec80 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
2ec90 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
2eca0 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f   pRec = &aMem[pO
2ecb0 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
2ecc0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
2ecd0 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
2ece0 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
2ecf0 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
2ed00 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2ed10 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
2ed20 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
2ed30 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65  ] = pRec;.    me
2ed40 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2ed50 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63  , pRec);.  }.  c
2ed60 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
2ed70 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65  p4.pFunc;.  asse
2ed80 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2ed90 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2eda0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2edb0 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70  ;.  ctx.pMem = p
2edc0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
2edd0 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  >p3];.  pMem->n+
2ede0 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  +;.  sqlite3Vdbe
2edf0 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20  MemInit(&t, db, 
2ee00 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78  MEM_Null);.  ctx
2ee10 2e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63 74  .pOut = &t;.  ct
2ee20 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
2ee30 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a   ctx.pVdbe = p;.
2ee40 20 20 63 74 78 2e 69 4f 70 20 3d 20 28 69 6e 74    ctx.iOp = (int
2ee50 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
2ee60 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30  ctx.skipFlag = 0
2ee70 3b 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e  ;.  (ctx.pFunc->
2ee80 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20  xStep)(&ctx, n, 
2ee90 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20  apVal); /* IMP: 
2eea0 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
2eeb0 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
2eec0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
2eed0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
2eee0 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2eef0 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20  e_text(&t));.   
2ef00 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
2ef10 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78  r;.  }.  if( ctx
2ef20 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20  .skipFlag ){.   
2ef30 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
2ef40 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
2ef50 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70  Seq );.    i = p
2ef60 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69  Op[-1].p1;.    i
2ef70 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64  f( i ) sqlite3Vd
2ef80 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2ef90 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a  Mem[i], 1);.  }.
2efa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2efb0 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 62  Release(&t);.  b
2efc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2efd0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
2efe0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
2eff0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
2f000 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78  1] N=P2.**.** Ex
2f010 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
2f020 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
2f030 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
2f040 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
2f050 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
2f060 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
2f070 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
2f080 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
2f090 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
2f0a0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
2f0b0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
2f0c0 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
2f0d0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2f0e0 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
2f0f0 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
2f100 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
2f110 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
2f120 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
2f130 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
2f140 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
2f150 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
2f160 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
2f170 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
2f180 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
2f190 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
2f1a0 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
2f1b0 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
2f1c0 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
2f1d0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
2f1e0 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
2f1f0 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
2f200 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
2f210 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
2f220 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f230 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
2f240 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2f250 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d  ursor) );.  pMem
2f260 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2f270 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
2f280 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
2f290 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
2f2a0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
2f2b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
2f2c0 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
2f2d0 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
2f2e0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
2f2f0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
2f300 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2f310 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
2f320 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
2f330 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2f340 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
2f350 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2f360 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
2f370 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2f380 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
2f390 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
2f3a0 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
2f3b0 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
2f3c0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
2f3d0 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
2f3e0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
2f3f0 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
2f400 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
2f410 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
2f420 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
2f430 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
2f440 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
2f450 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
2f460 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2f470 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52  SIVE, FULL,.** R
2f480 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43  ESTART, or TRUNC
2f490 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ATE.  Write 1 or
2f4a0 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
2f4b0 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
2f4c0 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
2f4d0 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
2f4e0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
2f4f0 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
2f500 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
2f510 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
2f520 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
2f530 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
2f540 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2f550 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
2f560 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
2f570 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
2f580 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
2f590 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
2f5a0 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
2f5b0 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
2f5c0 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
2f5d0 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
2f5e0 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
2f5f0 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
2f600 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
2f610 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
2f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f630 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2f640 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
2f650 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
2f660 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
2f670 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
2f680 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2f690 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
2f6a0 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
2f6b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2f6c0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2f6d0 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  aRes[0] = 0;.  a
2f6e0 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d  Res[1] = aRes[2]
2f6f0 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28   = -1;.  assert(
2f700 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2f710 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
2f720 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  IVE.       || pO
2f730 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2f740 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20  ECKPOINT_FULL.  
2f750 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2f760 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2f770 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20  NT_RESTART.     
2f780 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2f790 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2f7a0 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20  TRUNCATE.  );.  
2f7b0 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63  rc = sqlite3Chec
2f7c0 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e  kpoint(db, pOp->
2f7d0 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52  p1, pOp->p2, &aR
2f7e0 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29  es[1], &aRes[2])
2f7f0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2f800 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72  TE_BUSY ){.    r
2f810 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2f820 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
2f830 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
2f840 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
2f850 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
2f860 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
2f870 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2f880 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
2f890 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
2f8a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
2f8b0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2f8c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
2f8d0 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
2f8e0 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
2f8f0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
2f900 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
2f910 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
2f920 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
2f930 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
2f940 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
2f950 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
2f960 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
2f970 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
2f980 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
2f990 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
2f9a0 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
2f9b0 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
2f9c0 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
2f9d0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
2f9e0 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
2f9f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
2fa00 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
2fa10 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
2fa20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
2fa30 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
2fa40 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
2fa50 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
2fa60 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
2fa70 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
2fa80 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
2fa90 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
2faa0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2fab0 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
2fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fad0 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
2fae0 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
2faf0 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
2fb00 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
2fb10 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
2fb20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2fb30 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
2fb40 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
2fb50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
2fb60 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
2fb70 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb90 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
2fba0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
2fbb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2fbc0 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
2fbd0 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
2fbe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
2fbf0 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
2fc00 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
2fc10 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
2fc20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2fc30 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
2fc40 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
2fc50 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
2fc60 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
2fc70 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
2fc80 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2fc90 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
2fca0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2fcb0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2fcc0 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
2fcd0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2fce0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
2fcf0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2fd00 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2fd10 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
2fd20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2fd30 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2fd40 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2fd50 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2fd60 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
2fd70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2fd80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2fd90 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2fda0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2fdb0 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
2fdc0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2fdd0 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
2fde0 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
2fdf0 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
2fe00 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
2fe10 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2fe20 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
2fe30 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2fe40 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
2fe50 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
2fe60 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
2fe70 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
2fe80 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
2fe90 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
2fea0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2feb0 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
2fec0 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
2fed0 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
2fee0 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
2fef0 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
2ff00 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
2ff10 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
2ff20 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
2ff30 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
2ff40 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
2ff50 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
2ff60 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
2ff70 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
2ff80 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
2ff90 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
2ffa0 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
2ffb0 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
2ffc0 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
2ffd0 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
2ffe0 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
2fff0 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
30000 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
30010 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
30020 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
30030 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
30040 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
30050 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
30060 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
30070 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
30080 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
30090 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
300a0 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
300b0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
300c0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
300d0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
300e0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
300f0 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63  (p,.          "c
30100 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
30110 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
30120 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
30130 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
30140 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
30150 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
30160 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
30170 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
30180 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65  break;.    }else
30190 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f  {. .      if( eO
301a0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
301b0 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
301c0 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69       /* If leavi
301d0 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f  ng WAL mode, clo
301e0 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  se the log file.
301f0 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
30200 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20  the call.       
30210 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73   ** to PagerClos
30220 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e  eWal() checkpoin
30230 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74  ts and deletes t
30240 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c  he write-ahead-l
30250 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  og .        ** f
30260 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56  ile. An EXCLUSIV
30270 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c  E lock may still
30280 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20   be held on the 
30290 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20  database file . 
302a0 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20         ** after 
302b0 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74  a successful ret
302c0 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f  urn. .        */
302d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
302e0 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57  lite3PagerCloseW
302f0 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  al(pPager);.    
30300 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
30310 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
30320 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
30330 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
30340 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20  ager, eNew);.   
30350 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
30360 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47  se if( eOld==PAG
30370 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
30380 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20  EMORY ){.       
30390 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73   /* Cannot trans
303a0 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66  ition directly f
303b0 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41  rom MEMORY to WA
303c0 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46  L.  Use mode OFF
303d0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61  .        ** as a
303e0 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a  n intermediate *
303f0 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
30400 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
30410 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47  Mode(pPager, PAG
30420 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
30430 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  FF);.      }.  .
30440 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20        /* Open a 
30450 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
30460 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
30470 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
30480 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  the journal.    
30490 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20    ** mode, this 
304a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61  transaction alwa
304b0 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61  ys uses a rollba
304c0 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20  ck journal..    
304d0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
304e0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
304f0 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30  sInTrans(pBt)==0
30500 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63   );.      if( rc
30510 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
30520 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
30530 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69  te3BtreeSetVersi
30540 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50  on(pBt, (eNew==P
30550 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
30560 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a  _WAL ? 2 : 1));.
30570 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
30580 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
30590 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
305a0 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20  AL */..  if( rc 
305b0 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
305c0 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d  ld;.  }.  eNew =
305d0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
305e0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
305f0 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f  er, eNew);..  pO
30600 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
30610 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
30620 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
30630 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
30640 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
30650 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
30660 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
30670 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
30680 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
30690 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
306a0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
306b0 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
306c0 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
306d0 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
306e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
306f0 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
30700 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
30710 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
30720 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
30730 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
30740 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
30750 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
30760 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
30770 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
30780 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
30790 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
307a0 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
307b0 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
307c0 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
307d0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
307e0 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
307f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
30800 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  uum: {.  assert(
30810 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
30820 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
30830 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
30840 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62  ErrMsg, db);.  b
30850 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
30860 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
30870 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
30880 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
30890 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
308a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
308b0 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
308c0 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
308d0 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
308e0 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
308f0 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
30900 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
30910 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
30920 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
30930 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
30940 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
30950 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
30960 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
30970 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
30980 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
30990 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
309a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
309b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
309c0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
309d0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
309e0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
309f0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
30a00 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
30a10 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
30a20 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
30a30 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
30a40 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
30a50 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
30a60 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
30a70 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
30a80 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
30a90 4f 4e 45 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ONE ){.    rc = 
30aa0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67  SQLITE_OK;.    g
30ab0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
30ac0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
30ad0 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
30ae0 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
30af0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
30b00 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
30b10 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65  ements to expire
30b20 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72  .  When an expir
30b30 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
30b40 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e  is executed usin
30b50 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  g sqlite3_step()
30b60 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20   it will either 
30b70 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a  automatically.**
30b80 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c   reprepare itsel
30b90 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69  f (if it was ori
30ba0 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20  ginally created 
30bb0 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
30bc0 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f  epare_v2()).** o
30bd0 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77  r it will fail w
30be0 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  ith SQLITE_SCHEM
30bf0 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20  A..** .** If P1 
30c00 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53  is 0, then all S
30c10 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65  QL statements be
30c20 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66  come expired. If
30c30 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
30c40 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  .** then only th
30c50 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  e currently exec
30c60 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uting statement 
30c70 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63  is expired..*/.c
30c80 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b  ase OP_Expire: {
30c90 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20  .  if( !pOp->p1 
30ca0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  ){.    sqlite3Ex
30cb0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
30cc0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65  ements(db);.  }e
30cd0 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69  lse{.    p->expi
30ce0 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  red = 1;.  }.  b
30cf0 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
30d00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
30d10 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63  RED_CACHE./* Opc
30d20 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50  ode: TableLock P
30d30 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
30d40 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31  Synopsis: iDb=P1
30d50 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50   root=P2 write=P
30d60 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  3.**.** Obtain a
30d70 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
30d80 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
30d90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
30da0 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
30db0 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
30dc0 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
30dd0 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
30de0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
30df0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
30e00 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
30e10 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
30e20 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
30e30 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
30e40 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
30e50 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
30e60 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
30e70 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
30e80 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
30e90 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
30ea0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
30eb0 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
30ec0 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
30ed0 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
30ee0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
30ef0 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
30f00 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
30f10 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
30f20 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
30f30 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
30f40 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
30f50 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
30f60 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
30f70 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
30f80 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
30f90 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
30fa0 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
30fb0 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b  dUncommitted) ){
30fc0 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
30fd0 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
30fe0 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
30ff0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
31000 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
31010 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
31020 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  p1) );.    asser
31030 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
31040 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
31050 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==1 );.    rc = 
31060 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b  sqlite3BtreeLock
31070 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31  Table(db->aDb[p1
31080 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ].pBt, pOp->p2, 
31090 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20  isWriteLock);.  
310a0 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
310b0 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
310c0 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
310d0 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
310e0 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  z;.      sqlite3
310f0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61  VdbeError(p, "da
31100 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
31110 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
31120 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
31130 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31140 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
31150 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
31160 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31170 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
31180 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
31190 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
311a0 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
311b0 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
311c0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
311d0 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
311e0 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
311f0 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
31200 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
31210 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
31220 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
31230 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
31240 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
31250 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
31260 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
31270 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
31280 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
31290 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
312a0 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
312b0 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
312c0 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
312d0 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
312e0 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
312f0 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
31300 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
31310 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
31320 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
31330 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
31340 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
31350 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
31360 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31370 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31380 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31390 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
313a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
313b0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
313c0 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a  Create P1 P2 * *
313d0 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61   *.**.** P2 is a
313e0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68   register that h
313f0 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  olds the name of
31400 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
31410 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a   in database .**
31420 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
31430 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72  reate method for
31440 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
31450 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a  case OP_VCreate:
31460 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20   {.  Mem sMem;  
31470 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
31480 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
31490 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
314a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
314b0 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20  *zTab;  /* Name 
314c0 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
314d0 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65  able */..  memse
314e0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
314f0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65  of(sMem));.  sMe
31500 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20  m.db = db;.  /* 
31510 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c  Because P2 is al
31520 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74  ways a static st
31530 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f  ring, it is impo
31540 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20  ssible for the. 
31550 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
31560 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c  emCopy() to fail
31570 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61   */.  assert( (a
31580 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61  Mem[pOp->p2].fla
31590 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30  gs & MEM_Str)!=0
315a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61   );.  assert( (a
315b0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61  Mem[pOp->p2].fla
315c0 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29  gs & MEM_Static)
315d0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
315e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
315f0 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f  (&sMem, &aMem[pO
31600 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72  p->p2]);.  asser
31610 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
31620 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f   );.  zTab = (co
31630 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
31640 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d  3_value_text(&sM
31650 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  em);.  assert( z
31660 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Tab || db->mallo
31670 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28  cFailed );.  if(
31680 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20   zTab ){.    rc 
31690 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
316a0 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
316b0 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a  >p1, zTab, &p->z
316c0 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73  ErrMsg);.  }.  s
316d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
316e0 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 62  ease(&sMem);.  b
316f0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
31700 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
31710 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
31720 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31730 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31740 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
31750 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
31760 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
31770 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
31780 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
31790 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
317a0 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
317b0 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
317c0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
317d0 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d  Destroy: {.  db-
317e0 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20  >nVDestroy++;.  
317f0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
31800 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
31810 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
31820 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  .z);.  db->nVDes
31830 74 72 6f 79 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b  troy--;.  break;
31840 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
31850 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31860 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
31870 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31880 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31890 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
318a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
318b0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
318c0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
318d0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
318e0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
318f0 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
31900 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
31910 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
31920 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
31930 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
31940 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
31950 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
31960 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
31970 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
31980 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
31990 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
319a0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
319b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
319c0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
319d0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
319e0 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
319f0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
31a00 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
31a10 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
31a20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
31a30 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
31a40 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
31a50 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
31a60 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
31a70 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
31a80 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ED;.    break;. 
31a90 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70   }.  pModule = p
31aa0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
31ab0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
31ac0 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
31ad0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
31ae0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
31af0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
31b00 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
31b10 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  =rc ){.    /* In
31b20 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
31b30 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
31b40 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70  e class */.    p
31b50 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
31b60 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20  b = pVtab;..    
31b70 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
31b80 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
31b90 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61   */.    pCur = a
31ba0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
31bb0 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c   pOp->p1, 0, -1,
31bc0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
31bd0 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
31be0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
31bf0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
31c00 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b    pVtab->nRef++;
31c10 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
31c20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61    assert( db->ma
31c30 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
31c40 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
31c50 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
31c60 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  ;.      goto no_
31c70 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mem;.    }.  }. 
31c80 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31c90 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31ca0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31cb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31cc0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31cd0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
31ce0 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
31cf0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31d00 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61  iplan=r[P3] zpla
31d10 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20  n='P4'.**.** P1 
31d20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
31d30 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
31d40 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
31d50 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
31d60 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
31d70 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
31d80 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
31d90 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
31da0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
31db0 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
31dc0 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
31dd0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
31de0 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
31df0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
31e00 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
31e10 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
31e20 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
31e30 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
31e40 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
31e50 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
31e60 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
31e70 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
31e80 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
31e90 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
31ea0 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
31eb0 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
31ec0 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
31ed0 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
31ee0 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
31ef0 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
31f00 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
31f10 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
31f20 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
31f30 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
31f40 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
31f50 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
31f60 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
31f70 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
31f80 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
31f90 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
31fa0 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
31fb0 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
31fc0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
31fd0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
31fe0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
31ff0 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
32000 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
32010 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
32020 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
32030 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
32040 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
32050 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
32060 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
32070 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
32080 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
32090 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
320a0 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
320b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
320c0 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
320d0 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
320e0 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
320f0 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
32100 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
32110 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
32120 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
32130 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
32140 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
32150 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
32160 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
32170 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
32180 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
32190 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
321a0 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
321b0 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
321c0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
321d0 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
321e0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
321f0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
32200 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
32210 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
32220 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
32230 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
32240 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
32250 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
32260 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
32270 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
32280 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
32290 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
322a0 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
322b0 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
322c0 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
322d0 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30  hod */.  res = 0
322e0 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61  ;.  apArg = p->a
322f0 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20  pArg;.  for(i = 
32300 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
32310 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20  .    apArg[i] = 
32320 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d  &pArgc[i+1];.  }
32330 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
32340 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
32350 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
32360 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
32370 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  pArg);.  sqlite3
32380 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
32390 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
323a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
323b0 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  ){.    res = pMo
323c0 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
323d0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70  Cursor);.  }.  p
323e0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
323f0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
32400 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
32410 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
32420 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
32430 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32440 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32450 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
32460 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32470 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
32480 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
32490 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
324a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
324b0 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
324c0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
324d0 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
324e0 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
324f0 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
32500 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
32510 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
32520 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
32530 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
32540 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
32550 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
32560 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
32570 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
32580 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
32590 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
325a0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
325b0 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
325c0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
325d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
325e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
325f0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
32600 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
32610 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
32620 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
32630 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
32640 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
32650 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
32660 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
32670 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
32680 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
32690 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
326a0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
326b0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
326c0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
326d0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
326e0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
326f0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
32700 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
32710 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
32720 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
32730 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
32740 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
32750 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
32760 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
32770 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
32780 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
32790 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74  Column(pCur->pVt
327a0 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74  abCursor, &sCont
327b0 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
327c0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
327d0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
327e0 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65  b);.  if( sConte
327f0 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
32800 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
32810 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
32820 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
32830 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20  Encoding(pDest, 
32840 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
32850 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
32860 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
32870 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
32880 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
32890 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
328a0 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
328b0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
328c0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
328d0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
328e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
328f0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
32900 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32910 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
32920 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
32930 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
32940 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
32950 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
32960 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
32970 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
32980 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
32990 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
329a0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
329b0 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
329c0 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
329d0 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
329e0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
329f0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
32a00 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
32a10 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
32a20 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
32a30 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
32a40 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
32a50 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
32a60 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
32a70 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
32a80 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
32a90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
32aa0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
32ab0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
32ac0 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
32ad0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
32ae0 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
32af0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
32b00 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
32b10 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
32b20 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
32b30 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
32b40 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
32b50 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
32b60 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
32b70 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
32b80 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
32b90 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
32ba0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
32bb0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
32bc0 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
32bd0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
32be0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
32bf0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
32c00 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
32c10 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
32c20 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
32c30 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
32c40 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
32c50 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
32c60 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
32c70 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
32c80 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
32c90 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
32ca0 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
32cb0 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64    */.  rc = pMod
32cc0 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
32cd0 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
32ce0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
32cf0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
32d00 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
32d10 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
32d20 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
32d30 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
32d40 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62  rsor);.  }.  Vdb
32d50 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65  eBranchTaken(!re
32d60 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73  s,2);.  if( !res
32d70 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
32d80 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
32d90 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67  p to P2 */.    g
32da0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
32db0 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
32dc0 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f  errupt;.  }.  go
32dd0 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
32de0 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
32df0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
32e00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
32e10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32e20 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
32e30 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
32e40 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
32e50 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
32e60 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
32e70 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
32e80 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
32e90 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
32ea0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
32eb0 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
32ec0 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
32ed0 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
32ee0 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
32ef0 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
32f00 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
32f10 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
32f20 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
32f30 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
32f40 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
32f50 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
32f60 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
32f70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
32f80 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
32f90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
32fa0 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
32fb0 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
32fc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
32fd0 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
32fe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
32ff0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
33000 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
33010 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
33020 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
33030 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
33040 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
33050 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
33060 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
33070 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
33080 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
33090 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
330a0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
330b0 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
330c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
330d0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
330e0 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
330f0 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
33100 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
33110 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
33120 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
33130 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
33140 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
33150 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
33160 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
33170 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
33180 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
33190 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
331a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
331b0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
331c0 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
331d0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
331e0 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
331f0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
33200 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
33210 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
33220 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
33230 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
33240 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
33250 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
33260 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
33270 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
33280 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
33290 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
332a0 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
332b0 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
332c0 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
332d0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
332e0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
332f0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
33300 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
33310 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
33320 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
33330 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
33340 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
33350 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
33360 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
33370 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
33380 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
33390 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
333a0 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
333b0 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
333c0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
333d0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
333e0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
333f0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
33400 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
33410 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
33420 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
33430 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
33440 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
33450 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
33460 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
33470 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
33480 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
33490 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
334a0 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
334b0 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
334c0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
334d0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
334e0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
334f0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
33500 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
33510 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
33520 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
33530 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
33540 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
33550 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
33560 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
33570 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
33580 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
33590 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
335a0 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
335b0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
335c0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
335d0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
335e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
335f0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
33600 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
33610 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
33620 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
33630 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
33640 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
33650 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
33660 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
33670 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
33680 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
33690 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
336a0 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
336b0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
336c0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
336d0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
336e0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
336f0 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
33700 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
33710 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
33720 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
33730 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
33740 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
33750 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
33760 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
33770 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
33780 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
33790 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
337a0 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
337b0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
337c0 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
337d0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
337e0 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
337f0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
33800 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
33810 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
33820 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
33830 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
33840 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
33850 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d   break;.  }.  pM
33860 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
33870 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
33880 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
33890 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
338a0 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
338b0 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
338c0 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
338d0 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
338e0 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e  ict = db->vtabOn
338f0 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70  Conflict;.    ap
33900 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
33910 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
33920 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
33930 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
33940 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
33950 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
33960 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
33970 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
33980 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
33990 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
339a0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
339b0 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
339c0 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
339d0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
339e0 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
339f0 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
33a00 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
33a10 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
33a20 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
33a30 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
33a40 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
33a50 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
33a60 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
33a70 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
33a80 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
33a90 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
33aa0 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
33ab0 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
33ac0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
33ad0 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
33ae0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
33af0 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
33b00 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
33b10 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
33b20 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
33b30 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
33b40 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
33b50 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
33b60 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
33b70 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
33b80 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
33b90 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
33ba0 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
33bb0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
33bc0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
33bd0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
33be0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
33bf0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
33c00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
33c10 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
33c20 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
33c30 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
33c40 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
33c50 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
33c60 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
33c70 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
33c80 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
33c90 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
33ca0 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
33cb0 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
33cc0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
33cd0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
33ce0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
33cf0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
33d00 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
33d10 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d  treeLastPage(db-
33d20 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
33d30 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  t);.  break;.}.#
33d40 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
33d50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
33d60 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
33d70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50  code: MaxPgcnt P
33d80 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
33d90 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65  * Try to set the
33da0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
33db0 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65  unt for database
33dc0 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
33dd0 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f   in P3..** Do no
33de0 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75  t let the maximu
33df0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c  m page count fal
33e00 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72  l below the curr
33e10 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61  ent page count a
33e20 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61  nd.** do not cha
33e30 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
33e40 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
33e50 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a   if P3==0..**.**
33e60 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d   Store the maxim
33e70 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66  um page count af
33e80 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69  ter the change i
33e90 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
33ea0 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63  /.case OP_MaxPgc
33eb0 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
33ec0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e   /* out2 */.  un
33ed0 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61  signed int newMa
33ee0 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  x;.  Btree *pBt;
33ef0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
33f00 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
33f10 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
33f20 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
33f30 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
33f40 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
33f50 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
33f60 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
33f70 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
33f80 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
33f90 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
33fa0 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
33fb0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
33fc0 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
33fd0 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
33fe0 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
33ff0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
34000 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
34010 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
34020 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
34030 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
34040 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
34050 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
34060 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
34070 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
34080 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
34090 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
340a0 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
340b0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
340c0 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
340d0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
340e0 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
340f0 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
34100 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
34110 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
34120 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
34130 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
34140 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
34150 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
34160 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
34170 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
34180 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
34190 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
341a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
341b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
341c0 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
341d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
341e0 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20  MIT_TRACE.  if( 
341f0 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26  db->xTrace.   &&
34200 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a   !p->doingRerun.
34210 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
34220 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
34230 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
34240 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a  ))!=0.  ){.    z
34250 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78   = sqlite3VdbeEx
34260 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63  pandSql(p, zTrac
34270 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61  e);.    db->xTra
34280 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
34290 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , z);.    sqlite
342a0 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a  3DbFree(db, z);.
342b0 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
342c0 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
342d0 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f  E.  zTrace = (pO
342e0 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
342f0 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a  4.z : p->zSql);.
34300 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a    if( zTrace ){.
34310 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
34320 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
34330 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
34340 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  f( DbMaskTest(p-
34350 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d  >btreeMask, i)==
34360 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
34370 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
34380 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d  _control(db, db-
34390 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53  >aDb[i].zName, S
343a0 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43  QLITE_FCNTL_TRAC
343b0 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  E, zTrace);.    
343c0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
343d0 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
343e0 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66  _TRACE */.#ifdef
343f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
34400 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
34410 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
34420 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61  )!=0.   && (zTra
34430 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
34440 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
34450 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
34460 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
34470 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
34480 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
34490 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
344a0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
344b0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
344c0 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
344d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
344e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
344f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
34500 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
34510 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
34520 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
34530 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
34540 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
34550 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
34560 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
34570 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
34580 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
34590 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
345a0 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
345b0 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
345c0 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
345d0 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
345e0 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
345f0 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
34600 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
34610 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
34620 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
34630 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
34640 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
34650 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
34660 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
34670 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
34680 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
34690 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
346a0 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
346b0 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
346c0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
346d0 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
346e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
346f0 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
34700 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
34710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34750 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
34760 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
34770 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
34780 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
34790 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
347a0 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
347b0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
347c0 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
347d0 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
347e0 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
347f0 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
34800 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
34810 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
34820 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
34830 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
34840 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
34850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
34890 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
348a0 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
348b0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64 54  {.      u64 endT
348c0 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74  ime = sqlite3Hwt
348d0 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28  ime();.      if(
348e0 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29   endTime>start )
348f0 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73   pOrigOp->cycles
34900 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74   += endTime - st
34910 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67  art;.      pOrig
34920 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d  Op->cnt++;.    }
34930 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
34940 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
34950 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
34960 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
34970 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
34980 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
34990 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
349a0 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
349b0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
349c0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
349d0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
349e0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
349f0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
34a00 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
34a10 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
34a20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
34a30 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
34a40 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
34a50 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
34a60 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
34a70 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26   pOp>=&aOp[-1] &
34a80 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
34a90 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20  p-1] );..#ifdef 
34aa0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
34ab0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
34ac0 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
34ad0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
34ae0 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
34af0 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
34b00 20 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e     if( pOrigOp->
34b10 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47  opflags & (OPFLG
34b20 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
34b30 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
34b40 70 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d  pOrigOp->p2, &aM
34b50 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29  em[pOrigOp->p2])
34b60 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
34b70 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66  if( pOrigOp->opf
34b80 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
34b90 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
34ba0 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67  isterTrace(pOrig
34bb0 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
34bc0 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  rigOp->p3]);.   
34bd0 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
34be0 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
34bf0 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
34c00 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
34c10 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
34c20 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
34c30 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
34c40 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
34c50 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
34c60 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
34c70 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
34c80 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
34c90 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
34ca0 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
34cb0 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
34cc0 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
34cd0 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
34ce0 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
34cf0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
34d00 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
34d10 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
34d20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
34d30 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
34d40 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
34d50 20 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f 70         (int)(pOp
34d60 20 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c   - aOp), p->zSql
34d70 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
34d80 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
34d90 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
34da0 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
34db0 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
34dc0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
34dd0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
34de0 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
34df0 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
34e00 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
34e10 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
34e20 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
34e30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
34e40 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
34e50 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
34e60 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
34e70 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
34e80 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
34e90 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
34ea0 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
34eb0 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
34ec0 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
34ed0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
34ee0 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61  tRowid;.  testca
34ef0 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b  se( nVmStep>0 );
34f00 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
34f10 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
34f20 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e  _VM_STEP] += (in
34f30 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c  t)nVmStep;.  sql
34f40 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
34f50 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
34f60 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
34f70 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
34f80 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
34f90 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
34fa0 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
34fb0 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
34fc0 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
34fd0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 73 74  VdbeError(p, "st
34fe0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
34ff0 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
35000 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
35010 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
35020 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
35030 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
35040 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
35050 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
35060 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
35070 31 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  1;.  sqlite3Vdbe
35080 45 72 72 6f 72 28 70 2c 20 22 6f 75 74 20 6f 66  Error(p, "out of
35090 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20   memory");.  rc 
350a0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
350b0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
350c0 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
350d0 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
350e0 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
350f0 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
35100 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
35110 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
35120 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
35130 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
35140 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
35150 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
35160 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
35170 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
35180 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
35190 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
351a0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
351b0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
351c0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
351d0 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
351e0 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rc));.  }.  goto
351f0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
35200 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
35210 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69  here if the sqli
35220 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
35230 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74  API sets the int
35240 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67  errupt.  ** flag
35250 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
35260 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  _to_interrupt:. 
35270 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e   assert( db->u1.
35280 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b  isInterrupted );
35290 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49  .  rc = SQLITE_I
352a0 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72  NTERRUPT;.  p->r
352b0 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  c = rc;.  sqlite
352c0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
352d0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
352e0 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
352f0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
35300 7d 0a                                            }.