/ Hex Artifact Content
Login

Artifact 94cbc2115075b1a562a2a702c29ba48e74f85d34:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4770: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4780: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4790: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
47a0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
47b0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
47c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
47d0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
47e0: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
47f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4800: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4810: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4820: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4830: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4840: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4850: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4860: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4870: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4880: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4890: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
48a0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
48b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
48c0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
48d0: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
48e0: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
48f0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4900: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4910: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4920: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4930: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4940: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4960: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4970: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4980: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4990: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
49a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
49b0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
49c0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
49d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
49e0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
49f0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4a00: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4a10: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4a20: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4a30: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4a40: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4a50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4a60: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4a70: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4a80: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4a90: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4aa0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4ab0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4ac0: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4ad0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4ae0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4af0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4b00: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4b20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4b30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4b40: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4b60: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4b70: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
4b80: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
4b90: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4ba0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
4bb0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4bd0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4be0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4bf0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4c00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c10: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c20: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c30: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4c40: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4c50: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
4c60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4c70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4c80: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4c90: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4ca0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4cb0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4cc0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4cd0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4ce0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4cf0: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4d00: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4d10: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d20: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4d30: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4d40: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 23 69  p = &aOp[pc];.#i
4d50: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
4d60: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
4d70: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
4d80: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
4d90: 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  [pc]++;.#endif..
4da0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4db0: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4dc0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4dd0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4de0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4df0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4e00: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4e10: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
4e20: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e30: 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f  p(stdout, pc, pO
4e40: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
4e50: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4e60: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4e70: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4e80: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4e90: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4ea0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4eb0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4ec0: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4ed0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4ee0: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4ef0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f00: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4f10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4f20: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4f40: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4f50: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4f60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4f70: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4f80: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
4f90: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
4fa0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
4fb0: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66  erelease" tag, f
4fc0: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
4fd0: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
4fe0: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
4ff0: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
5000: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
5010: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
5020: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
5030: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
5040: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
5050: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
5060: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
5070: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
5080: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
5090: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
50a0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
50b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
50c0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
50d0: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
50e0: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
50f0: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
5100: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5110: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5120: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5130: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5140: 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  ) );.      pOut 
5150: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5160: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5170: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5180: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64 62  );.      if( Vdb
5190: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
51a0: 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
51b0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
51c0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51d0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51e0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
51f0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5200: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5220: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5230: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5240: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5250: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5260: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5270: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5280: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5290: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52a0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52b0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52c0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
52d0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
52e0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
52f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5300: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5320: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5340: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5350: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5360: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5370: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5390: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
53a0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
53b0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
53c0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
53d0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2]) );.      ass
53e0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
53f0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5400: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
5410: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5420: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5430: 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
5440: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
5450: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5460: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5470: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5480: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5490: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
54a0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
54b0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
54d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
54e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
54f0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5500: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5510: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5520: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5550: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5560: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5570: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5580: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
55a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55b0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55c0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55d0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55e0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5600: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5610: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5640: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5660: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5670: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5680: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
56a0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56b0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56c0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5720: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5730: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5740: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5750: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5760: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5770: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5780: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5790: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57a0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57b0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57d0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57e0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57f0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5800: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5810: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5820: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5830: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5840: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5850: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5860: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5870: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5880: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5890: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58a0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58b0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58c0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58d0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58e0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58f0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5900: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5910: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5920: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5930: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5940: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5950: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5960: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5970: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5980: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5990: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59b0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59c0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59d0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59e0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59f0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a00: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a10: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a20: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a30: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a40: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a50: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a60: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a70: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a80: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a90: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5aa0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ab0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ac0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ad0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ae0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5af0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b00: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b10: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b20: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b30: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b40: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b50: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b60: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b70: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b80: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b90: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5ba0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bb0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bc0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bd0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5be0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5bf0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c00: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c10: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c20: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c30: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c40: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c70: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c80: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c90: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5ca0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5cb0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cc0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cd0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5ce0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5cf0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5d00: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d10: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d20: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d30: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d40: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d50: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d60: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d70: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d80: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d90: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5da0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5db0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5dc0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dd0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5de0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
5e30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e40: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e50: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e60: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e70: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e80: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e90: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5ea0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5eb0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5ec0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ed0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ee0: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
5ef0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
5f00: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
5f10: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
5f20: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
5f30: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
5f40: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
5f50: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
5f60: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
5f70: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
5f80: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
5f90: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
5fa0: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
5fb0: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
5fc0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
5fd0: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
5fe0: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
5ff0: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6000: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6010: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6020: 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e   */.  pc = pOp->
6030: 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70  p2 - 1;..  /* Op
6040: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
6050: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
6060: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
6070: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
6080: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50   ** OP_VNext, OP
6090: 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20  _RowSetNext, or 
60a0: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
60b0: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
60c0: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
60d0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
60e0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
60f0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
6100: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
6110: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6120: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6130: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6140: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6150: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6160: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6170: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6180: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6190: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
61a0: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
61b0: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
61c0: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
61d0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
61e0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
61f0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
6200: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
6210: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6220: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6230: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6240: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6250: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6260: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6270: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6280: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6290: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
62a0: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
62b0: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
62c0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
62d0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
62e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
62f0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
6300: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6310: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6320: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6330: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6340: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6350: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6360: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6370: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6380: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6390: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
63a0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
63b0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
63c0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
63d0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
63e0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
63f0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
6400: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
6410: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6420: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6430: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6440: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6450: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6460: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6470: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6480: 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74  ress!=0 && nVmSt
6490: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
64a0: 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  it ){.    assert
64b0: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
64c0: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
64d0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
64e0: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
64f0: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
6500: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
6510: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
6520: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6530: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
6540: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6550: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
6560: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
6570: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d  rror_halt;.    }
6580: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20  .  }.#endif.  . 
6590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
65a0: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
65b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
65c0: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
65d0: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
65e0: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
65f0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6600: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6610: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6620: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6630: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6640: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
6650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
6660: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
6670: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6680: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
6690: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
66a0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
66b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
66c0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
66d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
66e0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
66f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6700: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6710: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6720: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6740: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6750: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6760: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6770: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6780: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6790: 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20  r P1.  After.** 
67a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
67b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
67c0: 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  defined..*/.case
67d0: 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20   OP_Return: {   
67e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
67f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
6800: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6810: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6820: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  ==MEM_Int );.  p
6830: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6840: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  .i;.  pIn1->flag
6850: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6860: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6870: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f  * Opcode: InitCo
6880: 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33  routine P1 P2 P3
6890: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75   * *.**.** Set u
68a0: 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f  p register P1 so
68b0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69   that it will Yi
68c0: 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75  eld to the corou
68d0: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
68e0: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
68f0: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
6900: 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  en the coroutine
6910: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6920: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6930: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6940: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6950: 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  r the coroutine 
6960: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
6970: 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e  o.** address P2.
6980: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6990: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f   EndCoroutine.*/
69a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72  .case OP_InitCor
69b0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a  outine: {     /*
69c0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
69d0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
69e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
69f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6a00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6a10: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6a20: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6a30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6a40: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6a50: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6a60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6a70: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6a80: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6a90: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6aa0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ab0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6ac0: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
6ad0: 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  >p2 ) pc = pOp->
6ae0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6af0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6b00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6b10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6b20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6b30: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6b40: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6b50: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6b60: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6b70: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6b80: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6b90: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6ba0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6bb0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6bc0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6bd0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
6be0: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
6bf0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6c00: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
6c10: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
6c20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c30: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c40: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
6c70: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
6c80: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6c90: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6ca0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6cb0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6cd0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6ce0: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6cf0: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6d00: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6d10: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6d20: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6d30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6d40: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
6d50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6d60: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6d70: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6d80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6d90: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
6da0: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
6db0: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
6dc0: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
6dd0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
6de0: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
6df0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
6e00: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
6e10: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
6e20: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
6e30: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6e40: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
6e50: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
6e60: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6e80: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
6e90: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
6ea0: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
6eb0: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
6ec0: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
6ed0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
6ee0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6ef0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6f00: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6f10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6f20: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
6f30: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6f40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6f50: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6f60: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6f70: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6f80: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6f90: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
6fa0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
6fb0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6fc0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6fd0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6fe0: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6ff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7000: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7010: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7020: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
7030: 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a  r[P3]=null halt.
7040: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
7050: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7060: 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20  r P3.  If it is 
7070: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
7080: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
7090: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
70a0: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
70b0: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
70c0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
70d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
70e0: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
70f0: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
7100: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
7110: 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
7120: 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e  ter should be 1.
7130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7140: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
7150: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
7160: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
7170: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
7180: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7190: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
71a0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
71b0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
71c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
71d0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
71e0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
71f0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7200: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7210: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7220: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7230: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7240: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7250: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7260: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7270: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7280: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7290: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
72a0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
72b0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
72c0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
72d0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
72e0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
72f0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7300: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7310: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7320: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7330: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7340: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7350: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7360: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7370: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7380: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7390: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
73a0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
73b0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
73c0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
73d0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
73e0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
73f0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7400: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7410: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7420: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7430: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7450: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7460: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7470: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7480: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7490: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
74a0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
74b0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
74c0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
74d0: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
74e0: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
74f0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
7500: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7510: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
7520: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7530: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
7540: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
7550: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7560: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
7570: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
7580: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
7590: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
75a0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
75b0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
75c0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
75d0: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
75e0: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
75f0: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
7600: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
7610: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
7620: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
7630: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
7640: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
7650: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
7660: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
7670: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63  e OP_Halt: {.  c
7680: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
7690: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
76a0: 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20  zLogFmt;..  if( 
76b0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
76c0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
76d0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
76e0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
76f0: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7700: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7710: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
7720: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
7730: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7740: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7750: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7760: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7770: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7780: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7790: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
77a0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
77b0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
77c0: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
77d0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
77e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
77f0: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7800: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7810: 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f  on pc is the OP_
7820: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7830: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7840: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7850: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7860: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7870: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7880: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7890: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
78a0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
78b0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
78c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
78d0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
78e0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
78f0: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7900: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7910: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7920: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7930: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7940: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7950: 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d  */.      pc = p-
7960: 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20  >aOp[pc].p2-1;. 
7970: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7980: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7990: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62  = p->aMem;.    b
79a0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
79b0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
79c0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
79d0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
79e0: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
79f0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7a00: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7a10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7a20: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7a30: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7a40: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7a50: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7a90: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73  EY" };.      ass
7aa0: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20  ert( pOp->p5>=1 
7ab0: 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  && pOp->p5<=4 );
7ac0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7ad0: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7ae0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7af0: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7b00: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b10: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7b20: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7b30: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a  p5==4 );.      z
7b40: 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f  Type = azType[pO
7b50: 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65  p->p5-1];.    }e
7b60: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65  lse{.      zType
7b70: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
7b80: 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30  assert( zType!=0
7b90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30   || pOp->p4.z!=0
7ba0: 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20   );.    zLogFmt 
7bb0: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7bc0: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7bd0: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7be0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7bf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7c00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7c10: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
7c20: 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a  t failed: %s", .
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f         zType, pO
7c50: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7c60: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  lse if( pOp->p4.
7c70: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7c80: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7c90: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7ca0: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
7cb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7cc0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7cd0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7ce0: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7cf0: 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29   failed", zType)
7d00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7d10: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
7d20: 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d   zLogFmt, pc, p-
7d30: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7d40: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7d50: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7d60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7d70: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7d80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7d90: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7da0: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7db0: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7dc0: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7dd0: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7de0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7df0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e00: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7e10: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7e20: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7e30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e40: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7e50: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7e60: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7e70: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7e80: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7e90: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7ea0: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7eb0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7ec0: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7ed0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7ee0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7ef0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7f00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7f10: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7f20: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7f30: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7f40: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
7f50: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7f60: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
7f70: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7f80: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7f90: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7fa0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7fb0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
7fc0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7fd0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
7fe0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
7ff0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8000: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8030: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8040: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8050: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
8060: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
8080: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
8090: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
80a0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
80b0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
80c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
80d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
80e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
80f0: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8100: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8110: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8120: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8130: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8140: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
8160: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
8170: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8180: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
8190: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
81a0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
81b0: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
81c0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
81d0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
81e0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
81f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8200: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8210: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8220: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8230: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8240: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8250: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8260: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8270: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8280: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8290: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
82a0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
82b0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
82c0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
82d0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
82e0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
82f0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8300: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8310: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8320: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8330: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8340: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8350: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
8360: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8370: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8380: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
8390: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
83a0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
83b0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
83c0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
83d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83e0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
83f0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8400: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8420: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8430: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8440: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8450: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
8460: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8470: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8480: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8490: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
84a0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
84b0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
84c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
84d0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
84e0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
84f0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8500: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8510: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8520: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8530: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8540: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8550: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8560: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8570: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8580: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8590: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
85a0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
85b0: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
85c0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
85d0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
85e0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
85f0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8600: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8610: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8620: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8630: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8640: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8650: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8660: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8670: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8680: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8690: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
86a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
86b0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
86c0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
86d0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
86e0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
86f0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8710: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
8720: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8730: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8740: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8750: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8760: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8770: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8780: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8790: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
87a0: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
87b0: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
87c0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
87d0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
87e0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
87f0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8800: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8810: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8820: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8830: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8840: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8850: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8860: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8870: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
8880: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8890: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
88a0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
88b0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
88c0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
88d0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
88e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
88f0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
8900: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8910: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61  p->p3>0 );.    a
8920: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8930: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8940: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8950: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8960: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8970: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8980: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8990: 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74  pIn3->u.i ) pOut
89a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
89b0: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
89c0: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72  M_Term;.  }.  br
89d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
89e0: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8a00: 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  :  r[P2..P3]=NUL
8a10: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8a20: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8a30: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8a40: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8a50: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8a60: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8a70: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8a80: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8a90: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8aa0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ab0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8ac0: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8ad0: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8ae0: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8af0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8b00: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8b10: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8b20: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8b30: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8b40: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8b50: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8b60: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8b70: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8b80: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8b90: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8ba0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8bb0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
8bc0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8bd0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
8be0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
8bf0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
8c00: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
8c10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8c20: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8c30: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
8c40: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
8c50: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
8c60: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
8c70: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77   : MEM_Null;.  w
8c80: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
8c90: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
8ca0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8cb0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
8cc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
8cd0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ull(pOut);.    p
8ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8cf0: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8d00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8d10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
8d20: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
8d30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8d40: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
8d50: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
8d60: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
8d70: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
8d80: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
8d90: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
8da0: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
8db0: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
8dc0: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
8dd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
8de0: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
8df0: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
8e00: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
8e10: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
8e20: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
8e30: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
8e40: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
8e50: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
8e60: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
8e70: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
8e80: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
8e90: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8ea0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
8eb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8ec0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8ed0: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
8ee0: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
8ef0: 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d  s|MEM_Null)&~MEM
8f00: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
8f10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f20: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
8f30: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8f40: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8f50: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8f60: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8f70: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8f80: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8f90: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8fa0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8fb0: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
8fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8fd0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8fe0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ff0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
9000: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
9010: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9020: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9030: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9040: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9050: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9060: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9070: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9080: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
9090: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
90a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
90b0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
90c0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
90d0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
90e0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
90f0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9100: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9110: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9120: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9130: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9140: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9150: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9160: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
9170: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
9180: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
9190: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
91a0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
91b0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
91c0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
91d0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
91e0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
91f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9200: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
9210: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
9220: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
9230: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9240: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9250: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9260: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9270: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9280: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9290: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
92a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
92b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
92c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
92d0: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
92e0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
92f0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9300: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9310: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9320: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9330: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
9340: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9350: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9360: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9370: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
9380: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
9390: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
93a0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
93b0: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
93c0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
93d0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
93e0: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
93f0: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9400: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9410: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9420: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9430: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9440: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9450: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9460: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
9480: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
9490: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
94a0: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
94b0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
94c0: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
94d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
94e0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
94f0: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9500: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9510: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9520: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9530: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9540: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9550: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9560: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9570: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9580: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9590: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
95a0: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
95b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
95c0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
95d0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
95e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
95f0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9600: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9610: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9620: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9630: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9640: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
9650: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
9660: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9670: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
9680: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
9690: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
96a0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
96b0: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
96c0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
96d0: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
96e0: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
96f0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9700: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9710: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9720: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9730: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
9740: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9750: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
9760: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9770: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9780: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9790: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
97a0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
97b0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
97c0: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
97d0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
97e0: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
97f0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9800: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9810: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9820: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9830: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
9840: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
9850: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
9860: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9870: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9880: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9890: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
98a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
98b0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
98c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
98d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
98e0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
98f0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9900: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9910: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9930: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
9940: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
9950: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
9960: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9970: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9980: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9990: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
99a0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
99b0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
99c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
99d0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
99e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
99f0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9a00: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9a10: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9a20: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9a30: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
9a40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9a50: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
9a60: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9a70: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9a80: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9a90: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9aa0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9ab0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9ac0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9ad0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9ae0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9af0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9b00: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9b10: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9b20: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9b30: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
9b40: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
9b50: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
9b60: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9b70: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9b80: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9b90: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9ba0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9bb0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9bc0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9bd0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9be0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9bf0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9c00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9c10: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9c20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9c30: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9c40: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
9c50: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9c60: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9c70: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
9c80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c90: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9ca0: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9cb0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9cc0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9ce0: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9cf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9d00: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
9d10: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
9d20: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
9d30: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
9d40: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
9d50: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
9d60: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
9d70: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
9d80: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
9d90: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9da0: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9db0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9dc0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9dd0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9de0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9df0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9e00: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
9e10: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
9e20: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
9e30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
9e40: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
9e50: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
9e60: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
9e70: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
9e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9e90: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9ea0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9eb0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9ec0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9ed0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ee0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9ef0: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9f00: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9f10: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9f20: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9f30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
9f40: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
9f50: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
9f60: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
9f70: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
9f80: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
9f90: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9fa0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9fb0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9fc0: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9fd0: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9fe0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9ff0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
a000: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a010: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
a020: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
a030: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a040: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
a050: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
a060: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
a070: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
a080: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
a090: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
a0a0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
a0b0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
a0c0: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
a0d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
a0e0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a0f0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
a100: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
a110: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
a120: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a130: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
a140: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
a150: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
a160: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
a170: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
a180: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
a190: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
a1a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a1b0: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
a1c0: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
a1d0: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
a1e0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
a1f0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
a200: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
a210: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
a220: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a230: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
a240: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
a250: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
a260: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
a270: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
a280: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
a290: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
a2a0: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
a2b0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a2c0: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
a2d0: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
a2e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
a2f0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
a300: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
a310: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
a320: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
a330: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
a340: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
a350: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
a360: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
a370: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
a380: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
a390: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
a3a0: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
a3b0: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
a3c0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a3d0: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
a3e0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
a3f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
a400: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
a410: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
a420: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
a430: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
a440: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
a450: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a460: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a470: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a480: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a490: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a4a0: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a4b0: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a4c0: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a4d0: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a4e0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a4f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a500: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a510: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a520: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a530: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a540: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
a550: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
a560: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
a570: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
a580: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
a590: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a5a0: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a5b0: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a5c0: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a5d0: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a5e0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a5f0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a600: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a610: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a620: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a630: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a640: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a650: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a660: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a670: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a680: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a690: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a6a0: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a6b0: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a6c0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a6d0: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a6f0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a700: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a710: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a720: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a730: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a740: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a750: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a760: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a770: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a780: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a790: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a7a0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a7b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a7c0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a7e0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a7f0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a800: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a810: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a820: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a840: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a850: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a860: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a870: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a880: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a890: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a8a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a8b0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a8c0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a8d0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a8e0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a8f0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a900: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a910: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a920: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a930: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a940: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a950: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a960: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a970: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a980: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a9a0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a9b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a9d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a9e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a9f0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
aa00: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
aa10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
aa20: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
aa30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
aa40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aa50: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
aa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
aa70: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
aa80: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
aa90: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
aaa0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
aab0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
aac0: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
aad0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
aae0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
aaf0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
ab00: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
ab10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
ab20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
ab30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
ab40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
ab50: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
ab60: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
ab70: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
ab80: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
ab90: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
aba0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
abb0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
abc0: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
abd0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
abe0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
abf0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
ac00: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
ac10: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
ac20: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
ac30: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
ac40: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
ac50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
ac60: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
ac70: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
ac80: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
ac90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
aca0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
acb0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
acc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
acd0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
ace0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
acf0: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
ad00: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
ad10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad20: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
ad30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ad40: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
ad50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ad60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ad70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ad80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ad90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ada0: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
adb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
adc0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
add0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
ade0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
adf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
ae10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ae20: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
ae30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ae40: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ae50: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ae60: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ae70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ae80: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
ae90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aea0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
aeb0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
aec0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
aed0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aee0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
aef0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
af00: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
af10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
af20: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
af30: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
af40: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
af50: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
af60: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
af70: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af80: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
af90: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
afa0: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
afb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
afc0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
afd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
afe0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
aff0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b000: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b010: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b020: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b030: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b040: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b050: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b060: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b070: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b080: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b090: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b0a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b0b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b0c0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b0d0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b0e0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b0f0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b100: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b110: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b120: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b130: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b140: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b150: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b160: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b170: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b180: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b190: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b1a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b1b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b1c0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b1d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b1e0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b1f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b200: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b210: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b220: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b230: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b240: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b250: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b260: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b270: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b280: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b290: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b2a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b2b0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b2c0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b2d0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b2f0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b300: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b310: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b320: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b330: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b340: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b350: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b360: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b370: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b380: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b390: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b3a0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b3b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b3c0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b3d0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b3e0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b3f0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b400: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b410: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b420: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b430: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b440: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b450: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b460: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b470: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b480: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b490: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b4a0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b4b0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b4c0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b4d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b4e0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b4f0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b500: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b510: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
b520: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b530: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
b540: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b550: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
b560: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b570: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
b580: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
b590: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b5a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b5b0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b5c0: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b5d0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b5e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b5f0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b600: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b610: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b620: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b630: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b640: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b650: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b660: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b680: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b690: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b6a0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b6b0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b6c0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b6d0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b6e0: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b6f0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b700: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b710: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b720: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b730: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b740: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b750: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b760: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b770: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b780: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b790: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b7a0: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b7b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b7c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b7d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b7e0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b7f0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b800: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b810: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b820: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b830: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b840: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b850: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b860: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b870: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b880: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b890: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b8a0: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b8b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b8c0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b8d0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b8e0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b8f0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b900: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b910: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b920: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b930: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b940: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b950: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b960: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b970: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b980: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b990: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b9a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b9b0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b9c0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b9d0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b9e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b9f0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
ba00: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
ba10: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
ba20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ba30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
ba40: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
ba50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ba60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
ba70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
ba80: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
ba90: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
baa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bab0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bac0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bad0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bae0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
baf0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
bb00: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
bb10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
bb20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
bb30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
bb40: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bb50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bb60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bb70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bb80: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
bb90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
bba0: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
bbb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bbc0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bbd0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
bbe0: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
bbf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
bc00: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
bc10: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
bc20: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
bc30: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
bc40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc50: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
bc60: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
bc70: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
bc80: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
bc90: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
bca0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
bcb0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
bcc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bcd0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
bce0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
bcf0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bd00: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
bd10: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
bd20: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
bd30: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
bd40: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
bd50: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
bd60: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
bd70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
bd80: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
bd90: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
bda0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
bdb0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
bdc0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
bdd0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
bde0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
bdf0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
be00: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
be10: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
be20: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
be30: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
be40: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
be50: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
be60: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
be70: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
be80: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
be90: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
bea0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
beb0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
bec0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
bed0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bee0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
bef0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
bf00: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
bf10: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
bf20: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
bf30: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
bf40: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
bf50: 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75  licly, only to u
bf60: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65  ser functions de
bf70: 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e  fined in func.c.
bf80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
bf90: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
bfa0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
bfb0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
bfc0: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
bfd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
bfe0: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
bff0: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
c000: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c010: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
c020: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
c030: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c040: 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29  ]=func(r[P2@P5])
c050: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
c060: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
c070: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c080: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
c090: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
c0a0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
c0b0: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
c0c0: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
c0d0: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
c0e0: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
c0f0: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
c100: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
c110: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
c120: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
c130: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
c140: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
c150: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
c160: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
c170: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
c180: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
c190: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
c1a0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
c1b0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
c1c0: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
c1d0: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
c1e0: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
c1f0: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
c200: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
c210: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
c220: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
c230: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
c240: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
c250: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
c260: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
c270: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
c280: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
c290: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
c2a0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
c2b0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
c2c0: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
c2d0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
c2e0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
c2f0: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
c300: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
c310: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
c320: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
c330: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
c340: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
c350: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
c360: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
c370: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
c380: 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  5;.  apVal = p->
c390: 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
c3a0: 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
c3b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
c3c0: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
c3d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
c3e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e  ursor) );.  ctx.
c3f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
c400: 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
c410: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 63 74 78  tToChange(p, ctx
c420: 2e 70 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72  .pOut);..  asser
c430: 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
c440: 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
c450: 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
c460: 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
c470: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
c480: 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
c490: 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
c4a0: 3b 0a 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d  ;.  pArg = &aMem
c4b0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72  [pOp->p2];.  for
c4c0: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
c4d0: 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73  pArg++){.    ass
c4e0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
c4f0: 70 41 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56  pArg) );.    apV
c500: 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20  al[i] = pArg;.  
c510: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
c520: 28 70 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49  (pArg);.    REGI
c530: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
c540: 70 32 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d  p2+i, pArg);.  }
c550: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
c560: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
c570: 44 45 46 20 29 3b 0a 20 20 63 74 78 2e 70 46 75  DEF );.  ctx.pFu
c580: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
c590: 6e 63 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20  nc;.  ctx.iOp = 
c5a0: 70 63 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20  pc;.  ctx.pVdbe 
c5b0: 3d 20 70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = p;.  MemSetTyp
c5c0: 65 46 6c 61 67 28 63 74 78 2e 70 4f 75 74 2c 20  eFlag(ctx.pOut, 
c5d0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78  MEM_Null);.  ctx
c5e0: 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  .fErrorOrAux = 0
c5f0: 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ;.  db->lastRowi
c600: 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
c610: 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46   (*ctx.pFunc->xF
c620: 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  unc)(&ctx, n, ap
c630: 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  Val); /* IMP: R-
c640: 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
c650: 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d   lastRowid = db-
c660: 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20  >lastRowid;  /* 
c670: 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63  Remember rowid c
c680: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78  hanges made by x
c690: 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  Func */..  /* If
c6a0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
c6b0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
c6c0: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
c6d0: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
c6e0: 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a  .fErrorOrAux ){.
c6f0: 20 20 20 20 69 66 28 20 63 74 78 2e 69 73 45 72      if( ctx.isEr
c700: 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
c710: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
c720: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
c730: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
c740: 75 65 5f 74 65 78 74 28 63 74 78 2e 70 4f 75 74  ue_text(ctx.pOut
c750: 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 63  ));.      rc = c
c760: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20  tx.isError;.    
c770: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
c780: 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 70  eDeleteAuxData(p
c790: 2c 20 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  , pc, pOp->p1);.
c7a0: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
c7b0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
c7c0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
c7d0: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
c7e0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
c7f0: 65 45 6e 63 6f 64 69 6e 67 28 63 74 78 2e 70 4f  eEncoding(ctx.pO
c800: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
c810: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
c820: 4d 65 6d 54 6f 6f 42 69 67 28 63 74 78 2e 70 4f  MemTooBig(ctx.pO
c830: 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ut) ){.    goto 
c840: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
c850: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
c860: 4f 70 2d 3e 70 33 2c 20 63 74 78 2e 70 4f 75 74  Op->p3, ctx.pOut
c870: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
c880: 42 4c 4f 42 53 49 5a 45 28 63 74 78 2e 70 4f 75  BLOBSIZE(ctx.pOu
c890: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
c8a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e  /* Opcode: BitAn
c8b0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
c8c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
c8d0: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
c8e0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
c8f0: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
c900: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
c910: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
c920: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
c930: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c940: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c950: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c960: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c970: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c980: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
c990: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
c9a0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
c9b0: 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]|r[P2].**.** Ta
c9c0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
c9d0: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
c9e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c9f0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
ca00: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
ca10: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ca20: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
ca30: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
ca40: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
ca50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
ca60: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
ca70: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
ca80: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72    r[P3]=r[P2]<<r
ca90: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
caa0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
cab0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
cac0: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
cad0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
cae0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
caf0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
cb00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
cb10: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
cb20: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
cb30: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
cb40: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
cb50: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
cb60: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
cb70: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
cb80: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
cb90: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
cba0: 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]>>r[P1].**.**
cbb0: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
cbc0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
cbd0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
cbe0: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
cbf0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
cc00: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
cc10: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
cc20: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
cc30: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
cc40: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
cc50: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
cc60: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
cc70: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
cc80: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cca0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
ccb0: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
ccc0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
ccd0: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
cce0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ccf0: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
cd00: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
cd10: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cd30: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
cd40: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
cd50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
cd60: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
cd70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cd80: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
cd90: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
cda0: 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b  64 iA;.  u64 uA;
cdb0: 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20  .  i64 iB;.  u8 
cdc0: 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  op;..  pIn1 = &a
cdd0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
cde0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
cdf0: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
ce00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
ce10: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
ce20: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
ce30: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
ce40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
ce50: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
ce60: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
ce70: 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64    iA = sqlite3Vd
ce80: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
ce90: 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33  ;.  iB = sqlite3
cea0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
ceb0: 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e  1);.  op = pOp->
cec0: 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70  opcode;.  if( op
ced0: 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20  ==OP_BitAnd ){. 
cee0: 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d     iA &= iB;.  }
cef0: 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  else if( op==OP_
cf00: 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20  BitOr ){.    iA 
cf10: 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  |= iB;.  }else i
cf20: 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20  f( iB!=0 ){.    
cf30: 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53  assert( op==OP_S
cf40: 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d  hiftRight || op=
cf50: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b  =OP_ShiftLeft );
cf60: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66  ..    /* If shif
cf70: 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69  ting by a negati
cf80: 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74  ve amount, shift
cf90: 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69   in the other di
cfa0: 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  rection */.    i
cfb0: 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20  f( iB<0 ){.     
cfc0: 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66   assert( OP_Shif
cfd0: 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74  tRight==OP_Shift
cfe0: 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20  Left+1 );.      
cff0: 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c  op = 2*OP_ShiftL
d000: 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20  eft + 1 - op;.  
d010: 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34      iB = iB>(-64
d020: 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20  ) ? -iB : 64;.  
d030: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e    }..    if( iB>
d040: 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20  =64 ){.      iA 
d050: 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d  = (iA>=0 || op==
d060: 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20  OP_ShiftLeft) ? 
d070: 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73  0 : -1;.    }els
d080: 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  e{.      memcpy(
d090: 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66  &uA, &iA, sizeof
d0a0: 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (uA));.      if(
d0b0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
d0c0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20  t ){.        uA 
d0d0: 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65  <<= iB;.      }e
d0e0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20  lse{.        uA 
d0f0: 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20  >>= iB;.        
d100: 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f  /* Sign-extend o
d110: 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20  n a right shift 
d120: 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75  of a negative nu
d130: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  mber */.        
d140: 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d  if( iA<0 ) uA |=
d150: 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66   ((((u64)0xfffff
d160: 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66  fff)<<32)|0xffff
d170: 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29  ffff) << (64-iB)
d180: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
d190: 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c  memcpy(&iA, &uA,
d1a0: 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20   sizeof(iA));.  
d1b0: 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
d1c0: 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53  u.i = iA;.  MemS
d1d0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
d1e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
d1f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d200: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
d210: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d220: 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b  s:  r[P1]=r[P1]+
d230: 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68  P2.** .** Add th
d240: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
d250: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d260: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
d270: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
d280: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
d290: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
d2a0: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
d2b0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
d2c0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
d2d0: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
d2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d2f0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d300: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
d310: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
d320: 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  , pIn1);.  sqlit
d330: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
d340: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
d350: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
d360: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
d370: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
d380: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
d390: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
d3a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d3b0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
d3c0: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
d3d0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
d3e0: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
d3f0: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
d400: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
d410: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
d420: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
d430: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
d440: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
d450: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
d460: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
d470: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
d480: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
d490: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
d4a0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
d4b0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d4c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d4d0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d4e0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
d4f0: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
d500: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
d510: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
d520: 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72  ing);.    VdbeBr
d530: 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d  anchTaken((pIn1-
d540: 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d  >flags&MEM_Int)=
d550: 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
d560: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
d570: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
d580: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
d590: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
d5a0: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
d5b0: 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  CH;.        goto
d5c0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
d5d0: 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ror;.      }else
d5e0: 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70  {.        pc = p
d5f0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
d600: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
d610: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d   }.    }.  }.  M
d620: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
d630: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
d640: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
d650: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
d660: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
d670: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
d680: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
d690: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
d6a0: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
d6b0: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
d6c0: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
d6d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
d6e0: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
d6f0: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
d700: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
d710: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
d720: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
d730: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
d740: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
d750: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
d760: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
d770: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
d780: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
d790: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
d7a0: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
d7b0: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
d7c0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
d7d0: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
d7e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
d7f0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d800: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d810: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
d820: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
d830: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
d840: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
d850: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
d860: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
d870: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
d880: 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31   Opcode: Cast P1
d890: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
d8a0: 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
d8b0: 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72  r[P1]).**.** For
d8c0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d8d0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d8e0: 65 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e  e the type defin
d8f0: 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a  ed by P2..** .**
d900: 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c   <ul>.** <li val
d910: 75 65 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a  ue="97"> TEXT.**
d920: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e   <li value="98">
d930: 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c   BLOB.** <li val
d940: 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43  ue="99"> NUMERIC
d950: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31  .** <li value="1
d960: 30 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20  00"> INTEGER.** 
d970: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e  <li value="101">
d980: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
d990: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d9a0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d9b0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d9c0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d9d0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
d9e0: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
d9f0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
da00: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
da10: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
da20: 4e 4f 4e 45 20 26 26 20 70 4f 70 2d 3e 70 32 3c  NONE && pOp->p2<
da30: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
da40: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
da50: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
da60: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
da70: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
da80: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
da90: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
daa0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
dab0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
dac0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
dad0: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
dae0: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
daf0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
db00: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
db10: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
db20: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
db30: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
db40: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
db50: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
db60: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
db70: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
db80: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
db90: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
dba0: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
dbb0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
dbc0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
dbd0: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
dbe0: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
dbf0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
dc00: 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20   if r[P1]<r[P3] 
dc10: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f  goto P2.**.** Co
dc20: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
dc30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
dc40: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
dc50: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
dc60: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
dc70: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
dc80: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
dc90: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
dca0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
dcb0: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
dcc0: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
dcd0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
dce0: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
dcf0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
dd00: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
dd10: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
dd20: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
dd30: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
dd40: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
dd50: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
dd60: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
dd70: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
dd80: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
dd90: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
dda0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
ddb0: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
ddc0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
ddd0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
dde0: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ddf0: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
de00: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
de10: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
de20: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
de30: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
de40: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
de50: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
de60: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
de70: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
de80: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
de90: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
dea0: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
deb0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
dec0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
ded0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
dee0: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
def0: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
df00: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
df10: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
df20: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
df30: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
df40: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
df50: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
df60: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
df70: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
df80: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
df90: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
dfa0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
dfb0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
dfc0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
dfd0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
dfe0: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
dff0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
e000: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
e010: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
e020: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
e030: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
e040: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
e050: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
e060: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
e070: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
e080: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
e090: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
e0a0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
e0b0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
e0c0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
e0d0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
e0e0: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
e0f0: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
e100: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
e110: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
e120: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
e130: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
e140: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
e150: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
e160: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
e170: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
e180: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
e190: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
e1a0: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
e1b0: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
e1c0: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
e1d0: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
e1e0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
e1f0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  f the SQLITE_NUL
e200: 4c 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69  LEQ bit is set i
e210: 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20  n P5, then NULL 
e220: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
e230: 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74  dered.** equal t
e240: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70  o one another, p
e250: 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65  rovided that the
e260: 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68  y do not have th
e270: 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a  eir MEM_Cleared.
e280: 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f  ** bit set..*/./
e290: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
e2a0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e2b0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e2c0: 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]!=r[P3] goto P2
e2d0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e2e0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e2f0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e300: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e310: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e320: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
e330: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e340: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
e350: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
e360: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
e370: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e380: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
e390: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e3a0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e3b0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e3c0: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e3d0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e3e0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e3f0: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e400: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e410: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e420: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e430: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
e440: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
e450: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
e460: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
e470: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
e480: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e490: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e4a0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e4b0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e4c0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e4d0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e4e0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
e4f0: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
e500: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
e510: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
e520: 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ==r[P3] goto P2.
e530: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e540: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
e550: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
e560: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e570: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e580: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
e590: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e5a0: 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53   are equal..** S
e5b0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
e5c0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
e5d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
e5e0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
e5f0: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
e600: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e610: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e620: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
e630: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
e640: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
e650: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
e660: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
e670: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
e680: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
e690: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
e6a0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e6b0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e6c0: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
e6d0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
e6e0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
e6f0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
e700: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
e710: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
e720: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
e730: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
e740: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
e750: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
e760: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e770: 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33  : if r[P1]<=r[P3
e780: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
e790: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
e7a0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
e7b0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
e7c0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
e7d0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
e7e0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
e7f0: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
e800: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
e810: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
e820: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
e830: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e840: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e850: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
e860: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
e870: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e880: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72  psis: if r[P1]>r
e890: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e8a0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e8b0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e8c0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e8d0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e8e0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
e8f0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
e900: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
e910: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
e920: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
e930: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
e940: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
e950: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e960: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
e970: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
e980: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e990: 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20  if r[P1]>=r[P3] 
e9a0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e9b0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e9c0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e9d0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e9e0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e9f0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
ea00: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
ea10: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
ea20: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
ea30: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
ea40: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ea50: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ea60: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ea70: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
ea80: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
ea90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
eaa0: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
eab0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
eac0: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
ead0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
eae0: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
eaf0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
eb00: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
eb10: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eb20: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
eb30: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
eb40: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
eb50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
eb60: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
eb70: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
eba0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ebb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ebd0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
ebe0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ebf0: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
ec00: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
ec10: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
ec20: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
ec30: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
ec40: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
ec50: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
ec60: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
ec70: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
ec80: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
ec90: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
eca0: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
ecb0: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
ecc0: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
ecd0: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
ece0: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
ecf0: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
ed00: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ed10: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
ed20: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
ed30: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
ed40: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
ed50: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
ed60: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
ed70: 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
ed80: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
ed90: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
eda0: 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
edb0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
edc0: 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
edd0: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
ede0: 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
edf0: 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
ee00: 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
ee10: 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
ee20: 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
ee30: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
ee40: 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
ee50: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
ee60: 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
ee70: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
ee80: 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
ee90: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
eea0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
eeb0: 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
eec0: 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61  OP_Ne );.      a
eed0: 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26  ssert( (flags1 &
eee0: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30   MEM_Cleared)==0
eef0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
ef00: 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
ef10: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d  ITE_JUMPIFNULL)=
ef20: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
ef30: 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c  (flags1&MEM_Null
ef40: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
ef50: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
ef60: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
ef70: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
ef80: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
ef90: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
efa0: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
efb0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
efc0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
efd0: 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 1;  /* Resul
efe0: 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ts are not equal
eff0: 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
f000: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
f010: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
f020: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
f030: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
f040: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
f050: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
f060: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
f070: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
f080: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
f090: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
f0a0: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
f0b0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f0c0: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f0d0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
f0e0: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
f0f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
f100: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
f110: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
f120: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
f130: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
f140: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
f150: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f160: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
f170: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
f180: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f190: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f1a0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  L ){.          p
f1b0: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
f1c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
f1d0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
f1e0: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
f1f0: 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72   /* Neither oper
f200: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f  and is NULL.  Do
f210: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a   a comparison. *
f220: 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d  /.    affinity =
f230: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f240: 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20  E_AFF_MASK;.    
f250: 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51  if( affinity>=SQ
f260: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
f270: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
f280: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In1->flags & (ME
f290: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
f2a0: 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
f2b0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70  r ){.        app
f2c0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
f2d0: 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20  y(pIn1,0);.     
f2e0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70 49   }.      if( (pI
f2f0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
f300: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f310: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f320: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c   ){.        appl
f330: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
f340: 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn3,0);.      
f350: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
f360: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
f370: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
f380: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
f390: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  ags & MEM_Str)==
f3a0: 30 20 26 26 20 28 70 49 6e 31 2d 3e 66 6c 61 67  0 && (pIn1->flag
f3b0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
f3c0: 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
f3d0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f3e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f3f0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
f400: 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
f410: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
f420: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
f430: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
f440: 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
f450: 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  ing, 1);.      }
f460: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
f470: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
f480: 72 29 3d 3d 30 20 26 26 20 28 70 49 6e 33 2d 3e  r)==0 && (pIn3->
f490: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
f4a0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29  |MEM_Real))!=0 )
f4b0: 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  {.        testca
f4c0: 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
f4d0: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
f4e0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
f4f0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
f500: 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  _Real );.       
f510: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
f520: 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65  tringify(pIn3, e
f530: 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20  ncoding, 1);.   
f540: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
f550: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
f560: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
f570: 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
f580: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  =0 );.    if( pI
f590: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f5a0: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
f5b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
f5c0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
f5d0: 20 20 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d      flags1 &= ~M
f5e0: 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20  EM_Zero;.    }. 
f5f0: 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61     if( pIn3->fla
f600: 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
f610: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f620: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
f630: 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61  pIn3);.      fla
f640: 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f  gs3 &= ~MEM_Zero
f650: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
f660: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
f670: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
f680: 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
f690: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
f6a0: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
f6b0: 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77  pColl);.  }.  sw
f6c0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
f6d0: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
f6e0: 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Eq:    res = re
f6f0: 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
f700: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
f710: 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30      res = res!=0
f720: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
f730: 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20   case OP_Lt:    
f740: 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20  res = res<0;    
f750: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f760: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20  e OP_Le:    res 
f770: 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72  = res<=0;     br
f780: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f790: 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Gt:    res = re
f7a0: 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s>0;      break;
f7b0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
f7c0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30      res = res>=0
f7d0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;     break;.  }
f7e0: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
f7f0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
f800: 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
f810: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
f820: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
f830: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
f840: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f850: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
f860: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
f870: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
f880: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
f890: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
f8a0: 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
f8b0: 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70  Taken(res!=0, (p
f8c0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f8d0: 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20  NULLEQ)?2:3);.  
f8e0: 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
f8f0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d     pc = pOp->p2-
f900: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f  1;.    }.  }.  /
f910: 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67  * Undo any chang
f920: 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79  es made by apply
f930: 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68  Affinity() to th
f940: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
f950: 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c  s. */.  pIn1->fl
f960: 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20  ags = flags1;.  
f970: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn3->flags = fl
f980: 61 67 73 33 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ags3;.  break;.}
f990: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
f9a0: 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
f9b0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
f9c0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
f9d0: 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
f9e0: 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
f9f0: 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
fa00: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
fa10: 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
fa20: 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
fa30: 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
fa40: 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
fa50: 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
fa60: 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
fa70: 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
fa80: 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
fa90: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
faa0: 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
fab0: 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
fac0: 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
fad0: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65  e..*/.case OP_Pe
fae0: 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61  rmutation: {.  a
faf0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
fb00: 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
fb10: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
fb20: 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65  ->p4.ai );.  aPe
fb30: 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  rmute = pOp->p4.
fb40: 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ai;.  break;.}..
fb50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
fb60: 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
fb70: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
fb80: 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32  [P1@P3] <-> r[P2
fb90: 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  @P3].**.** Compa
fba0: 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f  re two vectors o
fbb0: 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
fbc0: 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
fbd0: 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a  3-1) (call this.
fbe0: 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61  ** vector "A") a
fbf0: 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
fc00: 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
fc10: 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
fc20: 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
fc30: 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
fc40: 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
fc50: 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
fc60: 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
fc70: 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
fc80: 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
fc90: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d  the order of com
fca0: 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65  parison is.** de
fcb0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
fcc0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50  most recent OP_P
fcd0: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61  ermutation opera
fce0: 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  tor.  If the.** 
fcf0: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
fd00: 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  it is clear, the
fd10: 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63  n register are c
fd20: 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65  ompared in seque
fd30: 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a  ntial.** order..
fd40: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
fd50: 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
fd60: 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
fd70: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
fd80: 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
fd90: 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
fda0: 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
fdb0: 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
fdc0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
fdd0: 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
fde0: 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
fdf0: 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
fe00: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
fe10: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
fe20: 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
fe30: 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
fe40: 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
fe50: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
fe60: 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
fe70: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
fe80: 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
fe90: 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
fea0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
feb0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
fec0: 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
fed0: 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
fee0: 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
fef0: 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
ff00: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
ff10: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
ff20: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
ff30: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
ff40: 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
ff50: 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
ff60: 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
ff70: 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
ff80: 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28  rder */..  if( (
ff90: 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
ffa0: 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61  _PERMUTE)==0 ) a
ffb0: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e  Permute = 0;.  n
ffc0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b   = pOp->p3;.  pK
ffd0: 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
ffe0: 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
fff0: 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73  ert( n>0 );.  as
10000 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d  sert( pKeyInfo!=
10010 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  0 );.  p1 = pOp-
10020 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
10030 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  >p2;.#if SQLITE_
10040 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72  DEBUG.  if( aPer
10050 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20  mute ){.    int 
10060 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66  k, mx = 0;.    f
10070 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b  or(k=0; k<n; k++
10080 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b  ) if( aPermute[k
10090 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72  ]>mx ) mx = aPer
100a0 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73  mute[k];.    ass
100b0 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
100c0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  mx<=(p->nMem-p->
100d0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
100e0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
100f0 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
10100 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
10110 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10120 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
10130 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p1+n<=(p->nMem-p
10140 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10150 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
10160 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p2+n<=(p->nM
10170 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10180 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f   );.  }.#endif /
10190 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
101a0 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  /.  for(i=0; i<n
101b0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20  ; i++){.    idx 
101c0 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65  = aPermute ? aPe
101d0 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20  rmute[i] : i;.  
101e0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
101f0 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64  alid(&aMem[p1+id
10200 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  x]) );.    asser
10210 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
10220 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a  Mem[p2+idx]) );.
10230 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
10240 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d  CE(p1+idx, &aMem
10250 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52  [p1+idx]);.    R
10260 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
10270 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  +idx, &aMem[p2+i
10280 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  dx]);.    assert
10290 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  ( i<pKeyInfo->nF
102a0 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
102b0 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
102c0 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
102d0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
102e0 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
102f0 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
10300 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
10310 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
10320 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
10330 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
10340 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
10350 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
10360 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
10370 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
10380 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20  .  }.  aPermute 
10390 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
103a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
103b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
103c0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
103d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
103e0 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
103f0 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
10400 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
10410 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
10420 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
10430 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
10440 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
10450 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
10460 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
10470 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
10480 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
10490 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
104a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
104b0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
104c0 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70  mpare<0 ){.    p
104d0 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b  c = pOp->p1 - 1;
104e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
104f0 6e 28 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20  n(0,3);.  }else 
10500 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
10510 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
10520 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p2 - 1;  VdbeBr
10530 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a  anchTaken(1,3);.
10540 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20    }else{.    pc 
10550 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20  = pOp->p3 - 1;  
10560 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
10570 32 2c 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  2,3);.  }.  brea
10580 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10590 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20   And P1 P2 P3 * 
105a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
105b0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72  [P3]=(r[P1] && r
105c0 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
105d0 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
105e0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
105f0 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
10600 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
10610 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
10620 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
10630 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
10640 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
10650 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
10660 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
10670 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
10680 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
10690 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
106a0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
106b0 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
106c0 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
106d0 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
106e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
106f0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72  [P3]=(r[P1] || r
10700 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
10710 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
10720 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
10730 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
10740 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
10750 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
10760 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
10770 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
10780 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
10790 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
107a0 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
107b0 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
107c0 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
107d0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
107e0 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
107f0 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
10800 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
10810 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
10820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10830 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
10840 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
10850 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
10860 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
10870 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
10880 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
10890 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
108a0 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
108b0 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
108c0 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
108d0 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
108e0 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
108f0 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
10900 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
10910 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
10920 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10930 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
10940 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10950 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20  ull ){.    v1 = 
10960 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
10970 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
10980 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
10990 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20  0;.  }.  pIn2 = 
109a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
109b0 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67    if( pIn2->flag
109c0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
109d0 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65      v2 = 2;.  }e
109e0 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71  lse{.    v2 = sq
109f0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
10a00 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn2)!=0;.  }.
10a10 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
10a20 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
10a30 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
10a40 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
10a50 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
10a60 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
10a70 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
10a80 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
10a90 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
10aa0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
10ab0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
10ac0 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
10ad0 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
10ae0 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
10af0 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
10b00 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
10b10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
10b20 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
10b30 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
10b40 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
10b50 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
10b60 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
10b70 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
10b80 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
10b90 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
10ba0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10bb0 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a   Not P1 P2 * * *
10bc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
10bd0 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a  P2]= !r[P1].**.*
10be0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
10bf0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10c00 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
10c10 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
10c20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
10c30 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
10c40 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
10c50 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
10c60 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
10c70 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
10c80 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
10c90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
10ca0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
10cb0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10cc0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
10cd0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
10ce0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
10cf0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10d00 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
10d10 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
10d20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
10d30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10d40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
10d50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
10d60 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
10d70 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 49   = !sqlite3VdbeI
10d80 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
10d90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
10da0 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
10db0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
10dc0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
10dd0 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   ~r[P1].**.** In
10de0 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
10df0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
10e00 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
10e10 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
10e20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
10e30 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
10e40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
10e50 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
10e60 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
10e70 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
10e80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
10e90 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
10ea0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10eb0 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
10ec0 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
10ed0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
10ee0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10ef0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
10f00 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
10f10 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
10f20 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10f30 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
10f40 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
10f50 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
10f60 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56  >u.i = ~sqlite3V
10f70 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10f80 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e  }../* Opcode: On
10fa0 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
10fb0 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 22  *.** Check the "
10fc0 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62 65  once" flag numbe
10fd0 72 20 50 31 2e 20 49 66 20 69 74 20 69 73 20 73  r P1. If it is s
10fe0 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  et, jump to inst
10ff0 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20  ruction P2. .** 
11000 4f 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74  Otherwise, set t
11010 68 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c  he flag and fall
11020 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
11030 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
11040 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
11050 72 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64 65  rds, this opcode
11060 20 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c   causes all foll
11070 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70  owing opcodes up
11080 20 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28   through P2.** (
11090 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e  but not includin
110a0 67 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73  g P2) to run jus
110b0 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65  t once and to be
110c0 20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73   skipped on subs
110d0 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20  equent.** times 
110e0 74 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70  through the loop
110f0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63  ..**.** All "onc
11100 65 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e 69  e" flags are ini
11110 74 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20 77  tially cleared w
11120 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61 72  henever a prepar
11130 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
11140 66 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f 20  first begins to 
11150 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  run..*/.case OP_
11160 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  Once: {         
11170 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
11180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
11190 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b  <p->nOnceFlag );
111a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
111b0 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b  en(p->aOnceFlag[
111c0 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b  pOp->p1]!=0, 2);
111d0 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46  .  if( p->aOnceF
111e0 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a  lag[pOp->p1] ){.
111f0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
11200 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
11210 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f   p->aOnceFlag[pO
11220 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a  p->p1] = 1;.  }.
11230 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11240 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
11250 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
11260 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11270 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11280 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
11290 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
112a0 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
112b0 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
112c0 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
112d0 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
112e0 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
112f0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
11300 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
11310 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
11320 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
11330 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
11340 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
11350 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
11360 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
11370 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
11380 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
11390 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61  d false if it ha
113a0 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
113b0 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
113c0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
113d0 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
113e0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
113f0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
11400 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
11410 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20  ase OP_If:      
11420 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11430 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20  mp, in1 */.case 
11440 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20  OP_IfNot: {     
11450 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
11460 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a  in1 */.  int c;.
11470 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
11480 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
11490 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
114a0 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d  _Null ){.    c =
114b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73   pOp->p3;.  }els
114c0 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e{.#ifdef SQLITE
114d0 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
114e0 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c  OINT.    c = sql
114f0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11500 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65  (pIn1)!=0;.#else
11510 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
11520 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
11530 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
11540 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
11550 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
11560 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56   c = !c;.  }.  V
11570 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
11580 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
11590 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
115a0 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
115b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
115c0 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
115d0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
115e0 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55  s:  if r[P1]==NU
115f0 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
11600 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11610 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11620 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e  ster P1 is NULL.
11630 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75  .*/.case OP_IsNu
11640 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
11650 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49   /* same as TK_I
11660 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  SNULL, jump, in1
11670 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
11680 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
11690 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
116a0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
116b0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b  EM_Null)!=0, 2);
116c0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
116d0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
116e0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
116f0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
11700 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11710 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
11720 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
11730 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
11740 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
11750 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
11760 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
11770 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
11780 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
11790 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
117a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
117b0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
117c0 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
117d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
117e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
117f0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
11800 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11810 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
11820 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
11830 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
11840 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
11850 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
11860 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11870 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
11880 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
11890 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a  psis:  r[P3]=PX.
118a0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
118b0 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
118c0 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
118d0 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
118e0 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
118f0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
11900 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
11910 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
11920 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
11930 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
11940 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
11950 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
11960 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
11970 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
11980 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
11990 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
119a0 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
119b0 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
119c0 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
119d0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
119e0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
119f0 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
11a00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
11a10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
11a20 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
11a30 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
11a40 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
11a50 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
11a60 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
11a70 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
11a80 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
11a90 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
11aa0 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
11ab0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
11ac0 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
11ad0 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
11ae0 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
11af0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
11b00 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
11b10 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
11b20 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
11b30 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
11b40 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
11b50 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
11b60 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
11b70 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
11b80 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
11b90 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
11ba0 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
11bb0 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
11bc0 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
11bd0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
11be0 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
11bf0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
11c00 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
11c10 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 when.** the re
11c20 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
11c30 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
11c40 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
11c50 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
11c60 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
11c70 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
11c80 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
11c90 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
11ca0 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
11cb0 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
11cc0 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
11cd0 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
11ce0 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
11cf0 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
11d00 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69  OP_Column: {.  i
11d10 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
11d20 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
11d30 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
11d40 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  rd */.  int p2; 
11d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f             /* co
11d60 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
11d70 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62  etrieve */.  Vdb
11d80 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
11d90 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
11da0 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  or */.  BtCursor
11db0 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68   *pCrsr;   /* Th
11dc0 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a  e BTree cursor *
11dd0 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
11de0 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
11df0 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
11e00 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
11e10 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
11e20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
11e30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
11e40 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72  ength of the ser
11e50 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72  ialized data for
11e60 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20   the column */. 
11e70 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
11e80 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
11e90 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ter */.  Mem *pD
11ea0 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
11eb0 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
11ec0 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
11ed0 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
11ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11ef0 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
11f00 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
11f10 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
11f20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72  *zData;   /* Par
11f30 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
11f40 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
11f50 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64  .  const u8 *zHd
11f60 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e  r;    /* Next un
11f70 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74  parsed byte of t
11f80 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63  he header */.  c
11f90 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72  onst u8 *zEndHdr
11fa0 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  ; /* Pointer to 
11fb0 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
11fc0 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
11fd0 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
11fe0 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
11ff0 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
12000 20 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20   u32 szField;   
12010 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12020 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f   bytes in the co
12030 6e 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64  ntent of a field
12040 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
12050 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12060 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
12070 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
12080 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
12090 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
120a0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
120b0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
120c0 20 75 31 36 20 66 78 3b 20 20 20 20 20 20 20 20   u16 fx;        
120d0 20 20 20 20 2f 2a 20 70 44 65 73 74 2d 3e 66 6c      /* pDest->fl
120e0 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d  ags value */.  M
120f0 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
12100 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
12110 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
12120 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  */..  p2 = pOp->
12130 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
12140 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
12150 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
12160 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
12170 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
12180 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
12190 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
121a0 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
121b0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
121c0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
121d0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
121e0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
121f0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
12200 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
12210 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
12220 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
12230 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
12240 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
12250 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70 43  BLE.  assert( pC
12260 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30  ->pVtabCursor==0
12270 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e   ); /* OP_Column
12280 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e   never called on
12290 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
122a0 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72  /.#endif.  pCrsr
122b0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
122c0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
122d0 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f  =0 || pC->pseudo
122e0 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a  TableReg>0 ); /*
122f0 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50   pCrsr NULL on P
12300 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20  seudoTables */. 
12310 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
12320 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0 || pC->nullRow
12330 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   );          /* 
12340 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50  pC->nullRow on P
12350 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a  seudoTables */..
12360 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
12370 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c  or cache is stal
12380 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74  e, bring it up-t
12390 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d  o-date */.  rc =
123a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
123b0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
123c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
123d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
123e0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
123f0 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
12400 65 43 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20  eCtr ){.    if( 
12410 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
12420 20 20 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d       if( pCrsr==
12430 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
12440 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
12450 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
12460 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
12470 6d 5b 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  m[pC->pseudoTabl
12480 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61  eReg];.        a
12490 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
124a0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
124b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
124c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
124d0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
124e0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
124f0 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
12500 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
12510 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
12520 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
12530 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12540 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12550 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
12560 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
12570 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
12580 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
12590 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
125a0 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  sr );.      if( 
125b0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
125c0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
125d0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
125e0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
125f0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56  r) );.        VV
12600 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
12610 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
12620 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64  (pCrsr, &payload
12630 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20  Size64);.       
12640 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
12650 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75  ITE_OK ); /* Tru
12660 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
12670 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
12680 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20   above */.      
12690 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65    /* sqlite3Btre
126a0 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20  eParseCellPtr() 
126b0 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33 32  uses getVarint32
126c0 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74 68  () to extract th
126d0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79  e.        ** pay
126e0 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74  load size, so it
126f0 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66   is impossible f
12700 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  or payloadSize64
12710 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a   to be.        *
12720 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32  * larger than 32
12730 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20   bits. */.      
12740 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f    assert( (paylo
12750 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54  adSize64 & SQLIT
12760 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34  E_MAX_U32)==(u64
12770 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29  )payloadSize64 )
12780 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
12790 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ow = sqlite3Btre
127a0 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
127b0 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
127c0 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
127d0 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64  e = (u32)payload
127e0 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65  Size64;.      }e
127f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
12800 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
12810 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
12820 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20  Crsr) );.       
12830 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
12840 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
12850 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d  Size(pCrsr, &pC-
12860 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  >payloadSize);. 
12870 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
12880 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
12890 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
128a0 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
128b0 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
128c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
128d0 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  taFetch(pCrsr, &
128e0 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a  avail);.      }.
128f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
12900 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  ail<=65536 );  /
12910 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
12920 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
12930 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
12940 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33  yloadSize <= (u3
12950 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20  2)avail ){.     
12960 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70     pC->szRow = p
12970 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
12980 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12990 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
129a0 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a   avail;.      }.
129b0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
129c0 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
129d0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
129e0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
129f0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
12a00 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
12a10 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
12a20 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
12a30 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
12a40 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
12a50 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
12a60 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20  aRow, offset);. 
12a70 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
12a80 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73  d = 0;.    aOffs
12a90 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[0] = offset;.
12aa0 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  .    /* Make sur
12ab0 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
12ac0 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
12ad0 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
12ae0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a  e header..    **
12af0 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
12b00 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
12b10 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
12b20 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ion..    **.    
12b30 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
12b40 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
12b50 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
12b60 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
12b70 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65  byte.    ** type
12b80 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61  s use so much da
12b90 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68  ta space that th
12ba0 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
12bb0 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20  4096 and 32 of. 
12bc0 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
12bd0 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
12be0 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
12bf0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
12c00 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d  from a.    ** 3-
12c10 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61  byte type for ea
12c20 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75  ch of the maximu
12c30 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d  m of 32768 colum
12c40 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20  ns plus three.  
12c50 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
12c60 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
12c70 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
12c80 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
12c90 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  307..    */.    
12ca0 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33  if( offset > 983
12cb0 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70  07 || offset > p
12cc0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29  C->payloadSize )
12cd0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
12ce0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
12cf0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
12d00 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
12d10 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 61 76 61    }..    if( ava
12d20 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20  il<offset ){.   
12d30 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64     /* pC->aRow d
12d40 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  oes not have to 
12d50 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20  hold the entire 
12d60 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73  row, but it does
12d70 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20   at least.      
12d80 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72  ** need to cover
12d90 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74   the header of t
12da0 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70  he record.  If p
12db0 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
12dc0 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a   contain.      *
12dd0 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  * the complete h
12de0 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20  eader, then set 
12df0 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63  it to zero, forc
12e00 69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74  ing the header t
12e10 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79  o be.      ** dy
12e20 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
12e30 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43  ted. */.      pC
12e40 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ->aRow = 0;.    
12e50 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b    pC->szRow = 0;
12e60 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54  .    }..    /* T
12e70 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74  he following got
12e80 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  o is an optimiza
12e90 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65  tion.  It can be
12ea0 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20   omitted and.   
12eb0 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77   ** everything w
12ec0 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20  ill still work. 
12ed0 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69   But OP_Column i
12ee0 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73  s measurably fas
12ef0 74 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b  ter.    ** by sk
12f00 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65  ipping the subse
12f10 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61  quent conditiona
12f20 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  l, which is alwa
12f30 79 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a  ys true..    */.
12f40 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
12f50 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
12f60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
12f70 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64  ditional skipped
12f80 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f   */.    goto op_
12f90 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
12fa0 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  er;.  }..  /* Ma
12fb0 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
12fc0 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
12fd0 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
12fe0 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
12ff0 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
13000 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
13010 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
13020 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
13030 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
13040 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13050 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
13060 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
13070 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
13080 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
13090 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
130a0 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
130b0 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
130c0 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
130d0 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
130e0 20 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75    */.    op_colu
130f0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
13100 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
13110 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
13120 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
13130 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
13140 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
13150 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13160 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
13170 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
13180 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
13190 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
131a0 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
131b0 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
131c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
131d0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
131e0 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
131f0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61         !pC->isTa
13220 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  ble, &sMem);.   
13230 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13240 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13250 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13260 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
13270 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74    }.        zDat
13280 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
13290 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
132a0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
132b0 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
132c0 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
132d0 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
132e0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
132f0 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
13300 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
13310 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  */.      i = pC-
13320 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
13330 20 20 20 6f 66 66 73 65 74 20 3d 20 61 4f 66 66     offset = aOff
13340 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48  set[i];.      zH
13350 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d  dr = zData + pC-
13360 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20  >iHdrOffset;.   
13370 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61     zEndHdr = zDa
13380 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b  ta + aOffset[0];
13390 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69  .      assert( i
133a0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
133b0 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f  dHdr );.      do
133c0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 48  {.        if( zH
133d0 64 72 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20  dr[0]<0x80 ){.  
133e0 20 20 20 20 20 20 20 20 74 20 3d 20 7a 48 64 72          t = zHdr
133f0 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  [0];.          z
13400 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Hdr++;.        }
13410 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
13420 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47  zHdr += sqlite3G
13430 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c  etVarint32(zHdr,
13440 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   &t);.        }.
13450 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
13460 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  e[i] = t;.      
13470 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69    szField = sqli
13480 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13490 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
134a0 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65   offset += szFie
134b0 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ld;.        if( 
134c0 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29  offset<szField )
134d0 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66  {  /* True if of
134e0 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a  fset overflows *
134f0 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  /.          zHdr
13500 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20   = &zEndHdr[1]; 
13510 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54   /* Forces SQLIT
13520 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e  E_CORRUPT return
13530 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20   below */.      
13540 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
13550 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 2b 2b     }.        i++
13560 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  ;.        aOffse
13570 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20  t[i] = offset;. 
13580 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
13590 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
135a0 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  dr );.      pC->
135b0 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
135c0 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
135d0 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
135e0 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
135f0 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
13600 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
13610 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
13620 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  se(&sMem);.     
13630 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20     sMem.flags = 
13640 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
13650 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 54 68  }.  .      /* Th
13660 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
13670 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
13680 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
13690 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
136a0 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
136b0 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
136c0 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
136d0 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
136e0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
136f0 20 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 29    (zHdr>zEndHdr)
13700 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68  .      ** (2) th
13710 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20  e entire header 
13720 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74  was used but not
13730 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73   all data was us
13740 65 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  ed.      **     
13750 20 20 20 20 20 28 7a 48 64 72 3d 3d 7a 45 6e 64       (zHdr==zEnd
13760 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70  Hdr && offset!=p
13770 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
13780 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65        ** (3) the
13790 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61   end of the data
137a0 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20   extends beyond 
137b0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
137c0 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2a 20  ecord..      ** 
137d0 20 20 20 20 20 20 20 20 20 28 6f 66 66 73 65 74           (offset
137e0 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
137f0 7a 65 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ze).      */.   
13800 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45     if( (zHdr>=zE
13810 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a  ndHdr && (zHdr>z
13820 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74  EndHdr || offset
13830 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
13840 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
13850 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
13860 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
13870 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
13880 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
13890 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
138a0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
138b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
138c0 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
138d0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
138e0 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
138f0 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
13900 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
13910 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
13920 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
13930 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
13940 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
13950 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
13960 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
13970 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
13980 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
13990 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
139a0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
139b0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
139c0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
139d0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
139e0 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
139f0 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
13a00 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
13a10 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
13a20 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
13a30 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
13a40 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
13a50 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
13a60 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
13a70 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
13a80 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78    }.  }..  /* Ex
13a90 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
13aa0 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
13ab0 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
13ac0 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
13ad0 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
13ae0 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
13af0 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
13b00 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
13b10 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
13b20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
13b30 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
13b40 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
13b50 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
13b60 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
13b70 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
13b80 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
13b90 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
13ba0 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
13bb0 73 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62  st) ) sqlite3Vdb
13bc0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
13bd0 74 29 3b 0a 20 20 74 20 3d 20 70 43 2d 3e 61 54  t);.  t = pC->aT
13be0 79 70 65 5b 70 32 5d 3b 0a 20 20 69 66 28 20 70  ype[p2];.  if( p
13bf0 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65  C->szRow>=aOffse
13c00 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f  t[p2+1] ){.    /
13c10 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f  * This is the co
13c20 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20  mmon case where 
13c30 74 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74  the desired cont
13c40 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20  ent fits on the 
13c50 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20  original.    ** 
13c60 70 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65  page - where the
13c70 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20   content is not 
13c80 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70  on an overflow p
13c90 61 67 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  age */.    sqlit
13ca0 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
13cb0 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74  pC->aRow+aOffset
13cc0 5b 70 32 5d 2c 20 74 2c 20 70 44 65 73 74 29 3b  [p2], t, pDest);
13cd0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
13ce0 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
13cf0 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
13d00 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
13d10 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
13d20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
13d30 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
13d40 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
13d50 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
13d60 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
13d70 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
13d80 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
13d90 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
13da0 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
13db0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13dc0 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
13dd0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
13de0 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
13df0 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
13e00 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
13e10 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
13e20 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
13e30 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
13e40 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
13e50 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
13e60 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
13e70 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
13e80 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
13e90 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
13ea0 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
13eb0 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
13ec0 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
13ed0 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
13ee0 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 69  m disk.  NULL wi
13ef0 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 74 68 65 20  ll work for the 
13f00 76 61 6c 75 65 20 66 6f 72 20 73 74 72 69 6e 67  value for string
13f10 73 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 62  s.      ** and b
13f20 6c 6f 62 73 20 61 6e 64 20 77 68 61 74 65 76 65  lobs and whateve
13f30 72 20 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c  r is in the payl
13f40 6f 61 64 53 69 7a 65 36 34 20 76 61 72 69 61 62  oadSize64 variab
13f50 6c 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  le.      ** will
13f60 20 77 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74   work for everyt
13f70 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20  hing else. */.  
13f80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13f90 65 72 69 61 6c 47 65 74 28 74 3c 3d 31 33 20 3f  erialGet(t<=13 ?
13fa0 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69   (u8*)&payloadSi
13fb0 7a 65 36 34 20 3a 20 30 2c 20 74 2c 20 70 44 65  ze64 : 0, t, pDe
13fc0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
13fd0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
13fe0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
13ff0 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
14000 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d  t[p2], len, !pC-
14010 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20  >isTable,.      
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 65               pDe
14040 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  st);.      if( r
14050 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
14060 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
14070 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
14080 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
14090 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
140a0 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
140b0 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
140c0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
140d0 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
140e0 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  m;.    }.  }.  p
140f0 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  Dest->enc = enco
14100 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  ding;..op_column
14110 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49 66 20 74 68  _out:.  /* If th
14120 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
14130 73 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  s an ephemeral s
14140 74 72 69 6e 67 2c 20 67 6f 20 61 68 65 61 64 20  tring, go ahead 
14150 61 6e 64 20 70 65 72 73 69 73 74 0a 20 20 2a 2a  and persist.  **
14160 20 74 68 61 74 20 73 74 72 69 6e 67 20 69 6e 20   that string in 
14170 63 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  case the cursor 
14180 6d 6f 76 65 73 20 62 65 66 6f 72 65 20 74 68 65  moves before the
14190 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73   column value is
141a0 0a 20 20 2a 2a 20 75 73 65 64 2e 20 20 54 68 65  .  ** used.  The
141b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
141c0 64 6f 65 73 20 74 68 65 20 65 71 75 69 76 61 6c  does the equival
141d0 65 6e 74 20 6f 66 20 44 65 65 70 68 65 6d 65 72  ent of Deephemer
141e0 61 6c 69 7a 65 28 29 0a 20 20 2a 2a 20 62 75 74  alize().  ** but
141f0 20 64 6f 65 73 20 69 74 20 66 61 73 74 65 72 2e   does it faster.
14200 20 2a 2f 0a 20 20 69 66 28 20 28 70 44 65 73 74   */.  if( (pDest
14210 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ->flags & MEM_Ep
14220 68 65 6d 29 21 3d 30 20 26 26 20 70 44 65 73 74  hem)!=0 && pDest
14230 2d 3e 7a 20 29 7b 0a 20 20 20 20 66 78 20 3d 20  ->z ){.    fx = 
14240 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
14250 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
14260 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 66  );.    assert( f
14270 78 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 61 74  x!=0 );.    zDat
14280 61 20 3d 20 28 63 6f 6e 73 74 20 75 38 2a 29 70  a = (const u8*)p
14290 44 65 73 74 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e  Dest->z;.    len
142a0 20 3d 20 70 44 65 73 74 2d 3e 6e 3b 0a 20 20 20   = pDest->n;.   
142b0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
142c0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
142d0 65 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32 29 20  e(pDest, len+2) 
142e0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
142f0 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
14300 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
14310 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65  .    pDest->z[le
14320 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 70 44 65 73  n] = 0;.    pDes
14330 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b  t->z[len+1] = 0;
14340 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
14350 73 20 3d 20 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b  s = fx|MEM_Term;
14360 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  .  }.op_column_e
14370 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d  rror:.  UPDATE_M
14380 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
14390 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
143a0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
143b0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
143c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
143d0 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
143e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
143f0 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32  affinity(r[P1@P2
14400 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61  ]).**.** Apply a
14410 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
14420 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
14430 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
14440 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
14450 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
14460 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
14470 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
14480 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
14490 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
144a0 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
144b0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
144c0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
144d0 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
144e0 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
144f0 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
14500 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
14510 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69  onst char *zAffi
14520 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61  nity;   /* The a
14530 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70  ffinity to be ap
14540 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  plied */.  char 
14550 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  cAff;           
14560 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20      /* A single 
14570 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66  character of aff
14580 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66  inity */..  zAff
14590 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
145a0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  z;.  assert( zAf
145b0 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61  finity!=0 );.  a
145c0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
145d0 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
145e0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
145f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65  Op->p1];.  while
14600 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66  ( (cAff = *(zAff
14610 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a  inity++))!=0 ){.
14620 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
14630 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d   <= &p->aMem[(p-
14640 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
14650 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
14660 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
14670 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  1) );.    applyA
14680 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
14690 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
146a0 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
146b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
146c0 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
146d0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
146e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
146f0 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d  ]=mkrec(r[P1@P2]
14700 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ).**.** Convert 
14710 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
14720 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
14730 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20  nto the [record 
14740 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61  format].** use a
14750 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
14760 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
14770 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
14780 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
14790 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
147a0 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
147b0 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
147c0 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  r..**.** P4 may 
147d0 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
147e0 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
147f0 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
14800 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
14810 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
14820 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
14830 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
14840 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
14850 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
14860 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
14870 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
14880 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
14890 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
148a0 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
148b0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
148c0 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
148d0 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
148e0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
148f0 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
14900 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
14910 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
14920 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
14930 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
14940 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
14950 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
14960 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
14970 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
14980 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
14990 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
149a0 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
149b0 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
149c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
149d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
149e0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
149f0 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
14a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14a10 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
14a20 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
14a30 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
14a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
14a50 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
14a60 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
14a70 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14a90 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
14aa0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
14ab0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
14ac0 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
14ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14ae0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
14af0 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
14b00 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
14b10 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
14b20 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
14b30 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
14b40 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
14b50 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
14b60 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
14b70 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
14b80 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
14b90 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
14ba0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
14bb0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
14bc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
14bd0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
14be0 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
14bf0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
14c00 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
14c10 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
14c20 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
14c30 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
14c40 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
14c50 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
14c60 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
14c90 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65   zNewRecord[] he
14ca0 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  ader */.  int j;
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
14cd0 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63  n zNewRecord[] c
14ce0 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  ontent */.  int 
14cf0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
14d00 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
14d10 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
14d20 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
14d30 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
14d40 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
14d50 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
14d60 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
14d70 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
14d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14d90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14da0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14dc0 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
14dd0 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
14de0 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
14df0 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
14e00 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
14e10 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
14e20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
14e60 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
14e70 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
14e80 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
14e90 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
14ea0 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
14eb0 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68   ** and so forth
14ec0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
14ed0 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
14ee0 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
14ef0 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
14f00 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
14f10 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
14f20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
14f30 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
14f40 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
14f50 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
14f60 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
14f70 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
14f80 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
14f90 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
14fa0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
14fb0 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
14fc0 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
14fd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14fe0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
14ff0 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
15000 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
15010 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
15020 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
15030 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
15040 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15050 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
15060 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15070 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
15080 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
15090 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
150a0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
150b0 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
150c0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
150d0 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e  p2+nField<=(p->n
150e0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
150f0 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
15100 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  &aMem[nField];. 
15110 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
15120 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
15130 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
15140 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
15150 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
15160 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65  ormat;..  /* Ide
15170 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74  ntify the output
15180 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61   register */.  a
15190 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
151a0 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p1 || pOp->p
151b0 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  3>=pOp->p1+pOp->
151c0 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  p2 );.  pOut = &
151d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
151e0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
151f0 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
15200 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75  * Apply the requ
15210 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74  ested affinity t
15220 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a  o all inputs.  *
15230 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  /.  assert( pDat
15240 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69  a0<=pLast );.  i
15250 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a  f( zAffinity ){.
15260 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61      pRec = pData
15270 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  0;.    do{.     
15280 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
15290 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69  Rec++, *(zAffini
152a0 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
152b0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
152c0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20  zAffinity[0]==0 
152d0 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29  || pRec<=pLast )
152e0 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41  ;.    }while( zA
152f0 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20  ffinity[0] );.  
15300 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72  }..  /* Loop thr
15310 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74  ough the element
15320 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65  s that will make
15330 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74   up the record t
15340 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75  o figure.  ** ou
15350 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65  t how much space
15360 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
15370 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
15380 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70  .  */.  pRec = p
15390 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  Last;.  do{.    
153a0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
153b0 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
153c0 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65  pRec->uTemp = se
153d0 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69  rial_type = sqli
153e0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
153f0 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  e(pRec, file_for
15400 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20  mat);.    len = 
15410 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15420 6c 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f  lTypeLen(serial_
15430 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
15440 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
15450 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
15460 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
15470 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15480 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65  emExpandBlob(pRe
15490 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
154a0 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  .        nZero +
154b0 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
154c0 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20  .        len -= 
154d0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
154e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
154f0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
15500 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
15510 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b  ial_type==127 );
15520 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
15530 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20  erial_type==128 
15540 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  );.    nHdr += s
15550 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20  erial_type<=127 
15560 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72  ? 1 : sqlite3Var
15570 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
15580 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28  pe);.  }while( (
15590 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20  --pRec)>=pData0 
155a0 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43  );..  /* EVIDENC
155b0 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31  E-OF: R-22564-11
155c0 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62  647 The header b
155d0 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e  egins with a sin
155e0 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  gle varint.  ** 
155f0 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73  which determines
15600 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
15610 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
15620 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61  e header. The va
15630 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  rint.  ** value 
15640 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
15650 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74  he header in byt
15660 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  es including the
15670 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a   size varint.  *
15680 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74  * itself. */.  t
15690 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
156a0 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  26 );.  testcase
156b0 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20  ( nHdr==127 );. 
156c0 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29   if( nHdr<=126 )
156d0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d  {.    /* The com
156e0 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20  mon case */.    
156f0 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c  nHdr += 1;.  }el
15700 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20  se{.    /* Rare 
15710 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79  case of a really
15720 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f   large header */
15730 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73  .    nVarint = s
15740 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
15750 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20  nHdr);.    nHdr 
15760 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20  += nVarint;.    
15770 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
15780 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
15790 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  r) ) nHdr++;.  }
157a0 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
157b0 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79  nData;.  if( nBy
157c0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
157d0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
157e0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
157f0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
15800 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
15810 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
15820 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
15830 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
15840 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
15850 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
15860 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
15870 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
15880 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
15890 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
158a0 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
158b0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
158c0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
158d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
158e0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63  earAndResize() c
158f0 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65  ould clobber the
15900 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74   value before it
15910 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a   is used)..  */.
15920 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
15930 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
15940 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ze(pOut, (int)nB
15950 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  yte) ){.    goto
15960 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
15970 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
15980 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
15990 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
159a0 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
159b0 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
159c0 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20  d, nHdr);.  j = 
159d0 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20  nHdr;.  assert( 
159e0 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
159f0 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30  .  pRec = pData0
15a00 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69  ;.  do{.    seri
15a10 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e  al_type = pRec->
15a20 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56  uTemp;.    /* EV
15a30 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35  IDENCE-OF: R-065
15a40 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69  29-47362 Followi
15a50 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69  ng the size vari
15a60 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f  nt are one or mo
15a70 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69  re.    ** additi
15a80 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e  onal varints, on
15a90 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f  e per column. */
15aa0 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72  .    i += putVar
15ab0 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72  int32(&zNewRecor
15ac0 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70  d[i], serial_typ
15ad0 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  e);            /
15ae0 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
15af0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
15b00 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37  -OF: R-64536-517
15b10 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f  28 The values fo
15b20 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
15b30 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20   the record.    
15b40 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  ** immediately f
15b50 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72  ollow the header
15b60 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71  . */.    j += sq
15b70 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
15b80 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a  ut(&zNewRecord[j
15b90 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f  ], pRec, serial_
15ba0 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e  type); /* conten
15bb0 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28  t */.  }while( (
15bc0 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29  ++pRec)<=pLast )
15bd0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e  ;.  assert( i==n
15be0 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Hdr );.  assert(
15bf0 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20   j==nByte );..  
15c00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
15c10 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
15c20 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
15c30 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  r) );.  pOut->n 
15c40 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
15c50 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
15c60 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a  M_Blob;.  if( nZ
15c70 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ero ){.    pOut-
15c80 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f  >u.nZero = nZero
15c90 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
15ca0 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20  s |= MEM_Zero;. 
15cb0 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
15cc0 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
15cd0 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
15ce0 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65  ob is ever conve
15cf0 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a  rted to text */.
15d00 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
15d10 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
15d20 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
15d30 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
15d40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
15d50 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32  ode: Count P1 P2
15d60 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
15d70 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28  is: r[P2]=count(
15d80 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
15d90 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
15da0 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
15db0 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
15dc0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
15dd0 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
15de0 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
15df0 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
15e00 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
15e10 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
15e20 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
15e30 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
15e40 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  e */.  i64 nEntr
15e50 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
15e60 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d  Crsr;..  pCrsr =
15e70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
15e80 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  1]->pCursor;.  a
15e90 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
15ea0 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f    nEntry = 0;  /
15eb0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
15ec0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
15ed0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
15ee0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
15ef0 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72  BtreeCount(pCrsr
15f00 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f  , &nEntry);.  pO
15f10 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
15f20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
15f30 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
15f40 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
15f50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
15f60 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
15f70 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
15f80 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
15f90 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
15fa0 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
15fb0 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
15fc0 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
15fd0 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
15fe0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
15ff0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
16000 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
16010 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
16020 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
16030 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
16040 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
16050 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
16080 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
16090 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
160c0 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
160d0 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
160e0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
160f0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
16100 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
16110 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
16120 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
16130 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
16140 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
16150 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
16160 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
16170 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
16180 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
16190 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
161a0 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
161b0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
161c0 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
161d0 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
161e0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
161f0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
16200 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
16210 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
16220 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
16230 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
16240 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
16250 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16260 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
16270 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
16280 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16290 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
162a0 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
162b0 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
162c0 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
162d0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
162e0 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
162f0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
16300 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
16310 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
16320 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
16330 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
16340 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
16350 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
16360 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
16370 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
16380 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
16390 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
163a0 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
163b0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
163c0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
163d0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f  g, db, "cannot o
163e0 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
163f0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
16400 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
16410 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
16420 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16430 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
16440 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
16450 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
16460 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
16470 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
16480 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
16490 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
164a0 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
164b0 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
164c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
164d0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
164e0 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
164f0 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
16500 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
16510 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
16520 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
16530 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16540 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
16550 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
16560 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
16570 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
16580 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
16590 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
165a0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
165b0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
165c0 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
165d0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
165e0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
165f0 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
16600 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
16630 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
16640 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
16650 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
16660 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16670 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
16680 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
16690 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
166a0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
166b0 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
166c0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
166d0 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
166e0 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
166f0 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
16700 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
16710 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
16720 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
16730 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
16740 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
16750 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
16760 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
16770 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
16780 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
16790 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
167a0 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
167b0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
167c0 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
167d0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
167e0 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
167f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16800 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
16810 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16820 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
16830 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16840 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
16850 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
16860 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
16870 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
16880 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
16890 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
168a0 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
168b0 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
168c0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
168d0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
168e0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
168f0 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
16900 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
16910 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
16920 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ns;.        pNew
16930 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
16940 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
16950 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
16960 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
16970 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
16980 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
16990 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
169a0 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
169b0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
169c0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
169d0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
169e0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
169f0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
16a00 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
16a10 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
16a20 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
16a30 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
16a40 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
16a50 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
16a60 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
16a70 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
16a80 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
16a90 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
16aa0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
16ab0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
16ac0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
16ad0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16ae0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20  ErrMsg, db, "no 
16af0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
16b00 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
16b10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
16b20 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
16b30 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
16b40 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
16b50 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
16b60 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
16b70 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
16b80 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
16b90 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
16ba0 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
16bb0 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
16bc0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
16bd0 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
16be0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
16bf0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
16c00 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72         "cannot r
16c10 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
16c20 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
16c30 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20  s in progress". 
16c40 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63       );.      rc
16c50 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16c60 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
16c70 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
16c80 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
16c90 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
16ca0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
16cb0 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
16cc0 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
16cd0 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
16ce0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
16cf0 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
16d00 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
16d10 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
16d20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
16d30 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
16d40 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
16d50 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
16d60 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
16d70 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
16d80 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
16d90 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
16da0 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
16db0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
16dc0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
16dd0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
16de0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
16df0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
16e00 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
16e10 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
16e20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
16e30 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
16e40 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
16e50 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
16e60 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
16e70 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
16e80 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
16e90 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
16ea0 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
16eb0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
16ec0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16ed0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
16ee0 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
16ef0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
16f00 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
16f10 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53  .        int isS
16f20 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
16f30 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
16f40 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
16f50 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
16f60 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
16f70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
16f80 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
16f90 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
16fa0 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  e = (db->flags &
16fb0 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16fc0 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20  anges)!=0;.     
16fd0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
16fe0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
16ff0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  {.            rc
17000 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54   = sqlite3BtreeT
17010 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
17020 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20  ->aDb[ii].pBt,. 
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f        SQLITE_ABO
17060 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20  RT_ROLLBACK,.   
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
170a0 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ge==0);.        
170b0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
170c0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
170d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
170e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
170f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17100 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
17110 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  ange = 0;.      
17120 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
17130 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
17140 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
17150 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17160 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
17170 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
17180 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
17190 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
171a0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
171b0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
171c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
171d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
171e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
171f0 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68    if( isSchemaCh
17200 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ange ){.        
17210 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
17220 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
17230 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
17240 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
17250 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
17260 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ion(db);.       
17270 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28     db->flags = (
17280 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49  db->flags | SQLI
17290 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
172a0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
172b0 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
172c0 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
172d0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
172e0 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
172f0 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
17300 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
17310 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
17320 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
17330 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
17340 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
17350 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
17360 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
17370 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
17380 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
17390 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
173a0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
173b0 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
173c0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
173d0 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
173e0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
173f0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
17400 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
17410 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
17420 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
17430 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
17440 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
17450 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
17460 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
17470 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
17480 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
17490 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
174a0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
174b0 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
174c0 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
174d0 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
174e0 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
174f0 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
17500 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
17510 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17520 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
17530 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
17540 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
17550 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
17560 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
17570 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
17580 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
17590 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
175a0 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
175b0 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
175c0 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
175d0 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
175e0 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
175f0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
17600 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
17610 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65  rredCons = pSave
17620 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
17630 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62  Cons;.        db
17640 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17650 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
17660 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
17670 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  s;.      }..    
17680 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
17690 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
176a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
176b0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31  Savepoint(db, p1
176c0 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
176d0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
176e0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
176f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17700 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
17710 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
17720 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
17730 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
17740 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
17750 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
17760 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
17770 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
17780 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
17790 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
177a0 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
177b0 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
177c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
177d0 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
177e0 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
177f0 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
17800 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
17810 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
17820 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
17830 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
17840 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
17850 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
17860 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
17870 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
17880 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
17890 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
178a0 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
178b0 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
178c0 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
178d0 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75  llback;.  int tu
178e0 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72  rnOnAC;..  desir
178f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
17900 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
17910 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
17920 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69   turnOnAC = desi
17930 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26  redAutoCommit &&
17940 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
17950 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
17960 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
17970 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
17980 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
17990 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
179a0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52  oCommit==1 || iR
179b0 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20  ollback==0 );.  
179c0 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62  assert( db->nVdb
179d0 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a  eActive>0 );  /*
179e0 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f   At least this o
179f0 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20  ne VM is active 
17a00 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
17a10 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69  bIsReader );..#i
17a20 66 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e  f 0.  if( turnOn
17a30 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20  AC && iRollback 
17a40 26 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69  && db->nVdbeActi
17a50 76 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ve>1 ){.    /* I
17a60 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
17a70 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20  on implements a 
17a80 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68  ROLLBACK and oth
17a90 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a  er VMs are.    *
17aa0 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c  * still running,
17ab0 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69   and a transacti
17ac0 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65  on is active, re
17ad0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
17ae0 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20  dicating.    ** 
17af0 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
17b00 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
17b10 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
17b20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
17b30 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
17b40 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f  , db, "cannot ro
17b50 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
17b60 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
17b70 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17b80 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17b90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
17ba0 53 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  SY;.  }else.#end
17bb0 69 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41  if.  if( turnOnA
17bc0 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20  C && !iRollback 
17bd0 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  && db->nVdbeWrit
17be0 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  e>0 ){.    /* If
17bf0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17c00 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43  n implements a C
17c10 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20  OMMIT and other 
17c20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a  VMs are writing.
17c30 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
17c40 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
17c50 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
17c60 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
17c70 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
17c80 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
17c90 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
17ca0 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
17cb0 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
17cc0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
17cd0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17ce0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17cf0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
17d00 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
17d10 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17d20 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t!=db->autoCommi
17d30 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f  t ){.    if( iRo
17d40 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20  llback ){.      
17d50 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
17d60 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a  utoCommit==1 );.
17d70 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c        sqlite3Rol
17d80 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c  lbackAll(db, SQL
17d90 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
17da0 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  CK);.      db->a
17db0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
17dc0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63     }else if( (rc
17dd0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
17de0 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
17df0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17e00 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
17e10 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  n;.    }else{.  
17e20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17e30 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
17e40 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
17e50 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
17e60 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
17e70 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
17e80 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
17e90 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17ea0 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
17eb0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
17ec0 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
17ed0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17ee0 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  Y;.        goto 
17ef0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17f00 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
17f10 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
17f20 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
17f30 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
17f40 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
17f50 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
17f60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
17f70 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
17f80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17f90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
17fa0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
17fb0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17fc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
17fd0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
17fe0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20  ->zErrMsg, db,. 
17ff0 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
18000 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
18010 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
18020 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
18030 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
18040 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
18050 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
18060 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
18070 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
18080 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
18090 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
180a0 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
180b0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
180c0 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
180d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
180e0 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
180f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
18100 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
18110 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
18120 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
18130 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20  ion on database 
18140 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74  P1 if a transact
18150 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61  ion is not alrea
18160 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a  dy.** active..**
18170 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
18180 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
18190 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
181a0 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61  started, or if a
181b0 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61   .** read-transa
181c0 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79  ction is already
181d0 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75   active, it is u
181e0 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69  pgraded to a wri
181f0 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  te-transaction..
18200 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f  ** If P2 is zero
18210 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72  , then a read-tr
18220 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18230 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rted..**.** P1 i
18240 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
18250 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18260 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
18270 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
18280 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
18290 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
182a0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
182b0 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
182c0 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
182d0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
182e0 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
182f0 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
18300 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
18310 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
18320 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
18330 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
18340 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
18350 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
18360 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
18370 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
18380 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
18390 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
183a0 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
183b0 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
183c0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
183d0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
183e0 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
183f0 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
18400 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
18410 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
18420 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
18430 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
18440 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
18450 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
18460 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
18470 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
18480 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
18490 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
184a0 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
184b0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
184c0 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73  lows the changes
184d0 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a   made by this.**
184e0 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c   VDBE to be roll
184f0 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
18500 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
18510 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
18520 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
18530 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66   transaction. If
18540 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63   no error is enc
18550 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74  ountered, the st
18560 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18570 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f  ion.** will auto
18580 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74  matically commit
18590 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
185a0 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  alts..**.** If P
185b0 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  5!=0 then this o
185c0 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b  pcode also check
185d0 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  s the schema coo
185e0 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a  kie against P3.*
185f0 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61  * and the schema
18600 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
18610 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a  ter against P4..
18620 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
18630 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
18640 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
18650 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
18660 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
18670 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
18680 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
18690 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
186a0 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
186b0 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
186c0 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
186d0 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
186e0 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73  chema.  If the s
186f0 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20  chema.** cookie 
18700 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72  in P3 differs fr
18710 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  om the schema co
18720 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61  okie in the data
18730 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a  base header or.*
18740 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  * if the schema 
18750 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
18760 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73  er in P4 differs
18770 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
18780 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20  t.** generation 
18790 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e  counter, then an
187a0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65   SQLITE_SCHEMA e
187b0 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61  rror is raised a
187c0 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nd execution.** 
187d0 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69  halts.  The sqli
187e0 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70  te3_step() wrapp
187f0 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68  er function migh
18800 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65  t then reprepare
18810 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
18820 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66  t and rerun it f
18830 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
18840 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  g..*/.case OP_Tr
18850 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
18860 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74  tree *pBt;.  int
18870 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47   iMeta;.  int iG
18880 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  en;..  assert( p
18890 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
188a0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
188b0 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Only==0 || pOp->
188c0 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p2==0 );.  asser
188d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
188e0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
188f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
18900 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
18910 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
18920 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
18930 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26   && (db->flags &
18940 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
18950 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  y)!=0 ){.    rc 
18960 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  = SQLITE_READONL
18970 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  Y;.    goto abor
18980 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18990 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e    }.  pBt = db->
189a0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
189b0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
189c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
189d0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
189e0 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
189f0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18a00 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
18a10 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
18a20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
18a30 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
18a40 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
18a50 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
18a60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18a70 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
18a80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
18a90 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
18aa0 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
18ab0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
18ac0 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
18ad0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
18ae0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a  ->nVdbeRead>1) .
18af0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
18b00 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
18b10 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
18b20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
18b30 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
18b40 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
18b50 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
18b60 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
18b70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
18b80 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
18b90 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
18ba0 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
18bb0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
18bc0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
18bd0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
18be0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
18bf0 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
18c00 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
18c10 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
18c20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
18c30 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
18c40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18c50 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
18c60 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
18c70 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
18c80 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
18c90 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
18ca0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
18cb0 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
18cc0 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
18cd0 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
18ce0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18cf0 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
18d00 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
18d10 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
18d20 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
18d30 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
18d40 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
18d50 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
18d60 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
18d70 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
18d80 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d    p->nStmtDefImm
18d90 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
18da0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
18db0 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65   }..    /* Gathe
18dc0 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  r the schema ver
18dd0 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
18de0 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a  checking:.    **
18df0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
18e00 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36  OF: R-32195-1946
18e10 35 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72  5 The schema ver
18e20 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20  sion is used by 
18e30 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61  SQLite.    ** ea
18e40 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
18e50 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
18e60 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
18e70 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66  nternal cache of
18e80 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65   the.    ** sche
18e90 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d  ma used when com
18ea0 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71  piling the SQL q
18eb0 75 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65  uery matches the
18ec0 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20   schema of the. 
18ed0 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61     ** database a
18ee0 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65  gainst which the
18ef0 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20   compiled query 
18f00 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63  is actually exec
18f10 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  uted..    */.   
18f20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
18f30 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f  Meta(pBt, BTREE_
18f40 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20  SCHEMA_VERSION, 
18f50 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
18f60 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61      iGen = db->a
18f70 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
18f80 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e  ema->iGeneration
18f90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
18fa0 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b  Gen = iMeta = 0;
18fb0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
18fc0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
18fd0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
18fe0 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  32 );.  if( pOp-
18ff0 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70  >p5 && (iMeta!=p
19000 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d  Op->p3 || iGen!=
19010 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20  pOp->p4.i) ){.  
19020 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
19030 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
19040 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
19050 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
19060 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
19070 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
19080 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
19090 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
190a0 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
190b0 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
190c0 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
190d0 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
190e0 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
190f0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
19100 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
19110 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
19120 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
19130 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
19140 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
19150 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
19160 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
19170 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
19180 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
19190 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
191a0 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
191b0 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
191c0 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
191d0 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
191e0 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
191f0 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
19200 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
19210 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
19220 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
19230 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
19240 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
19250 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
19260 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
19270 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
19280 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
19290 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
192a0 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
192b0 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
192c0 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
192d0 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
192e0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
192f0 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
19300 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
19310 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
19320 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
19330 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
19340 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
19350 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
19360 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
19370 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
19380 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
19390 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
193a0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
193b0 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
193c0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
193d0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
193e0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
193f0 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
19400 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19410 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20  ode: ReadCookie 
19420 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
19430 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e  ** Read cookie n
19440 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61  umber P3 from da
19450 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72  tabase P1 and wr
19460 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69  ite it into regi
19470 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d  ster P2..** P3==
19480 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
19490 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20  version.  P3==2 
194a0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
194b0 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33  format..** P3==3
194c0 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
194d0 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
194e0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
194f0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
19500 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
19510 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
19520 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
19530 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
19540 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
19550 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
19560 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
19570 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
19580 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
19590 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
195a0 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
195b0 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
195c0 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
195d0 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
195e0 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
195f0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
19600 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
19610 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
19620 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
19630 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ase */.  int iMe
19640 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
19650 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
19660 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
19670 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d  eader );.  iDb =
19680 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
19690 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
196a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
196b0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
196c0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
196d0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
196e0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
196f0 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
19700 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
19710 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
19720 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
19730 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  Db) );..  sqlite
19740 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
19750 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
19760 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
19770 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d  &iMeta);.  pOut-
19780 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
19790 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
197a0 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
197b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
197c0 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74  * Write the cont
197d0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
197e0 50 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20  P3 (interpreted 
197f0 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a  as an integer).*
19800 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75  * into cookie nu
19810 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62  mber P2 of datab
19820 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69  ase P1.  P2==1 i
19830 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  s the schema ver
19840 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32  sion.  .** P2==2
19850 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
19860 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69   format. P2==3 i
19870 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
19880 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
19890 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
198a0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
198b0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
198c0 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
198d0 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
198e0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
198f0 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
19900 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
19910 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
19920 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
19930 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
19940 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
19950 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
19960 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33  : {       /* in3
19970 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20   */.  Db *pDb;. 
19980 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
19990 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
199a0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
199b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
199c0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
199d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
199e0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
199f0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
19a00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
19a10 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
19a20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
19a30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
19a40 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
19a50 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
19a60 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
19a70 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ld(db, pOp->p1, 
19a80 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  0) );.  pIn3 = &
19a90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
19aa0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
19ab0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b  ntegerify(pIn3);
19ac0 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61  .  /* See note a
19ad0 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74  bout index shift
19ae0 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f  ing on OP_ReadCo
19af0 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  okie */.  rc = s
19b00 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74  qlite3BtreeUpdat
19b10 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20  eMeta(pDb->pBt, 
19b20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49  pOp->p2, (int)pI
19b30 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20  n3->u.i);.  if( 
19b40 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53  pOp->p2==BTREE_S
19b50 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b  CHEMA_VERSION ){
19b60 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65  .    /* When the
19b70 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
19b80 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74  hanges, record t
19b90 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e  he new cookie in
19ba0 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20  ternally */.    
19bb0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63  pDb->pSchema->sc
19bc0 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69  hema_cookie = (i
19bd0 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn3->u.i;.  
19be0 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
19bf0 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
19c00 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ges;.  }else if(
19c10 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
19c20 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20  FILE_FORMAT ){. 
19c30 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61     /* Record cha
19c40 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65  nges in the file
19c50 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70   format */.    p
19c60 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
19c70 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70  e_format = (u8)p
19c80 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In3->u.i;.  }.  
19c90 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
19ca0 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
19cb0 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
19cc0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
19cd0 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
19ce0 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
19cf0 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
19d00 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
19d10 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
19d20 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
19d30 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70  ments(db);.    p
19d40 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
19d50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
19d60 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
19d70 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
19d80 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
19d90 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
19da0 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
19db0 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
19dc0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
19dd0 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
19de0 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
19df0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
19e00 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
19e10 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
19e20 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
19e30 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
19e40 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
19e50 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
19e60 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
19e70 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19e80 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
19e90 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
19ea0 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
19eb0 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
19ec0 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
19ed0 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
19ee0 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
19ef0 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
19f00 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
19f10 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
19f20 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
19f30 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
19f40 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
19f50 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
19f60 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ative..**.** If 
19f70 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74  P5!=0 then use t
19f80 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
19f90 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65  gister P2 as the
19fa0 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a   root page, not.
19fb0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
19fc0 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a  P2 itself..**.**
19fd0 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61   There will be a
19fe0 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
19ff0 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65  e database whene
1a000 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a  ver there is an.
1a010 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20  ** open cursor. 
1a020 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
1a030 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72   was unlocked pr
1a040 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  ior to this inst
1a050 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20  ruction.** then 
1a060 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61  a read lock is a
1a070 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20  cquired as part 
1a080 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
1a090 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20  ion.  A read.** 
1a0a0 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65  lock allows othe
1a0b0 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72  r processes to r
1a0c0 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
1a0d0 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a   but prohibits.*
1a0e0 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  * any other proc
1a0f0 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69  ess from modifyi
1a100 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
1a110 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20    The read lock 
1a120 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77  is.** released w
1a130 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20  hen all cursors 
1a140 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20  are closed.  If 
1a150 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a160 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20   attempts.** to 
1a170 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
1a180 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73  but fails, the s
1a190 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73  cript terminates
1a1a0 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49   with an.** SQLI
1a1b0 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f  TE_BUSY error co
1a1c0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  de..**.** The P4
1a1d0 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1a1e0 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1a1f0 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1a200 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1a210 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1a220 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1a230 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1a240 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1a250 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
1a260 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
1a270 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
1a280 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1a290 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1a2a0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
1a2b0 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
1a2c0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1a2d0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1a2e0 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
1a2f0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1a300 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1a310 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65   table..**.** Se
1a320 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74  e also: OpenWrit
1a330 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a  e, ReopenIdx.*/.
1a340 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65  /* Opcode: Reope
1a350 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34  nIdx P1 P2 P3 P4
1a360 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1a370 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1a380 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1a390 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  Idx opcode works
1a3a0 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65   exactly like Re
1a3b0 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68  adOpen except th
1a3c0 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63  at it first.** c
1a3d0 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
1a3e0 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31  the cursor on P1
1a3f0 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1a400 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67   with a root pag
1a410 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50  e.** number of P
1a420 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74  2 and if it is t
1a430 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d  his opcode becom
1a440 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20  es a no-op.  In 
1a450 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20  other words,.** 
1a460 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  if the cursor is
1a470 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64   already open, d
1a480 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e  o not reopen it.
1a490 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1a4a0 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20  nIdx opcode may 
1a4b0 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74  only be used wit
1a4c0 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68  h P5==0 and with
1a4d0 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50   P4 being.** a P
1a4e0 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74  4_KEYINFO object
1a4f0 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
1a500 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73  the P3 value mus
1a510 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
1a520 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20  .** every other 
1a530 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65  ReopenIdx or Ope
1a540 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73 61  nRead for the sa
1a550 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  me cursor number
1a560 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20  ..**.** See the 
1a570 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20  OpenRead opcode 
1a580 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f  documentation fo
1a590 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
1a5a0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
1a5b0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
1a5c0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
1a5d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1a5e0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1a5f0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
1a600 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
1a610 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
1a620 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
1a630 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
1a640 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
1a650 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
1a660 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1a670 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
1a680 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
1a690 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1a6a0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1a6b0 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1a6c0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1a6d0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1a6e0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1a6f0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1a700 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1a710 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
1a720 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
1a730 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
1a740 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1a750 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1a760 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
1a770 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
1a780 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
1a790 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1a7a0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
1a7b0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
1a7c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1a7d0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
1a7e0 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
1a7f0 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
1a800 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
1a810 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
1a820 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
1a830 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1a840 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
1a850 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
1a860 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1a870 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
1a880 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
1a890 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
1a8a0 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
1a8b0 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
1a8c0 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
1a8d0 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
1a8e0 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1a8f0 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
1a900 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
1a910 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
1a920 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20  e OP_ReopenIdx: 
1a930 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1a940 70 43 75 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCur;..  assert(
1a950 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1a960 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1a970 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1a980 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   );.  pCur = p->
1a990 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1a9a0 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43    if( pCur && pC
1a9b0 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75  ur->pgnoRoot==(u
1a9c0 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  32)pOp->p2 ){.  
1a9d0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
1a9e0 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20  iDb==pOp->p3 ); 
1a9f0 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65       /* Guarante
1aa00 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67  ed by the code g
1aa10 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  enerator */.    
1aa20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20  break;.  }.  /* 
1aa30 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1aa40 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
1aa50 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f  pen or is open o
1aa60 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20  n a different.  
1aa70 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66  ** index, then f
1aa80 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1aa90 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20   OP_OpenRead to 
1aaa0 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a  force a reopen *
1aab0 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  /.}.case OP_Open
1aac0 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
1aad0 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74  enWrite: {.  int
1aae0 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
1aaf0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
1ab00 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
1ab10 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
1ab20 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
1ab30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1ab40 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
1ab50 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
1ab60 26 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  &(OPFLAG_P2ISREG
1ab70 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29  |OPFLAG_BULKCSR)
1ab80 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20  )==pOp->p5 );.  
1ab90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1aba0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1abb0 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  e || pOp->p5==0 
1abc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1abd0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1abe0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1abf0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20  de==OP_OpenRead 
1ac00 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1ac10 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20  OP_ReopenIdx.   
1ac20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61         || p->rea
1ac30 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1ac40 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1ac50 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1ac60 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b  _ABORT_ROLLBACK;
1ac70 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1ac80 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1ac90 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1aca0 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1acb0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1acc0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1acd0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1ace0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1acf0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1ad00 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1ad10 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1ad20 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1ad30 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1ad40 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1ad50 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1ad60 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1ad70 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20  wrFlag = 1;.    
1ad80 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1ad90 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1ada0 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1adb0 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1adc0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1add0 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1ade0 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1adf0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1ae00 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1ae10 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1ae20 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1ae30 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1ae40 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1ae50 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1ae60 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1ae70 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1ae80 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1ae90 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
1aea0 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  ) );.    pIn2 = 
1aeb0 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1aec0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1aed0 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1aee0 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1aef0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1af00 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1af10 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1af20 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1af30 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1af40 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1af50 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1af60 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1af70 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1af80 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1af90 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1afa0 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1afb0 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1afc0 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1afd0 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1afe0 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1aff0 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1b000 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1b010 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1b020 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1b030 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1b040 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66  ction. */.    if
1b050 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20  ( NEVER(p2<2) ) 
1b060 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1b070 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1b080 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
1b090 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b0a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1b0b0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b0c0 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1b0d0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b0e0 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1b0f0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1b100 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1b110 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1b120 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1b130 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1b140 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1b150 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1b160 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1b170 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1b180 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1b190 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1b1a0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1b1b0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1b1c0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1b1d0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1b1e0 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1b1f0 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1b200 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1b210 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1b220 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1b230 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1b240 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1b250 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  iDb, 1);.  if( p
1b260 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1b270 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1b280 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1b290 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1b2a0 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1b2b0 6f 74 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20  ot = p2;.  rc = 
1b2c0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1b2d0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1b2e0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1b2f0 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  r->pCursor);.  p
1b300 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1b310 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
1b320 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
1b330 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
1b340 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  AD );.  sqlite3B
1b350 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28  treeCursorHints(
1b360 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28  pCur->pCursor, (
1b370 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1b380 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f  _BULKCSR));..  /
1b390 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1b3a0 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1b3b0 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1b3c0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1b3d0 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1b3e0 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1b3f0 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1b400 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1b410 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1b420 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1b430 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1b440 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1b450 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1b460 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1b470 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1b480 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1b490 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1b4a0 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1b4b0 49 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  INFO;.  break;.}
1b4c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1b4d0 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1b4e0 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1b4f0 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1b500 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1b510 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1b520 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1b530 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1b540 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1b550 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1b560 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1b570 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1b580 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1b590 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1b5a0 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1b5b0 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1b5c0 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1b5d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1b5e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1b5f0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1b600 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1b610 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1b620 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1b630 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1b640 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1b650 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1b660 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1b670 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1b680 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1b690 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1b6a0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1b6b0 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1b6c0 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1b6d0 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1b6e0 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1b6f0 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1b700 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1b710 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1b720 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1b730 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1b740 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1b750 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1b760 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1b770 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1b780 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1b790 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1b7a0 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1b7b0 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1b7c0 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1b7d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1b7e0 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1b7f0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1b800 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1b810 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1b820 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1b830 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1b840 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1b850 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1b860 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1b870 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1b880 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1b890 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1b8a0 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1b8b0 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1b8c0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1b8d0 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1b8e0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1b8f0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1b900 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1b910 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1b920 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1b930 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1b940 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1b950 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1b960 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1b970 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b980 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1b990 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b9a0 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1b9b0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b9c0 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1b9d0 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1b9e0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1b9f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1ba00 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1ba10 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1ba20 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1ba30 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  -1, 1);.  if( pC
1ba40 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1ba50 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1ba60 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  ow = 1;.  pCx->i
1ba70 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a  sEphemeral = 1;.
1ba80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ba90 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73  reeOpen(db->pVfs
1baa0 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70  , 0, db, &pCx->p
1bab0 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  Bt, .           
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1bad0 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1bae0 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c  | BTREE_SINGLE |
1baf0 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61   pOp->p5, vfsFla
1bb00 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  gs);.  if( rc==S
1bb10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1bb20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bb30 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
1bb40 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  >pBt, 1);.  }.  
1bb50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1bb60 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61  K ){.    /* If a
1bb70 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1bb80 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72   is required, cr
1bb90 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69  eate it by calli
1bba0 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  ng.    ** sqlite
1bbb0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1bbc0 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
1bbd0 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20  EE_BLOBKEY flag 
1bbe0 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70  before.    ** op
1bbf0 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74  ening it. If a t
1bc00 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69  ransient table i
1bc10 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74  s required, just
1bc20 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20   use the.    ** 
1bc30 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1bc40 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68  eated table with
1bc50 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e   root-page 1 (an
1bc60 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62   BLOB_INTKEY tab
1bc70 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1bc80 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20  if( (pKeyInfo = 
1bc90 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1bca0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  )!=0 ){.      in
1bcb0 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73  t pgno;.      as
1bcc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1bcd0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1bce0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1bcf0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1bd00 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70  ble(pCx->pBt, &p
1bd10 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gno, BTREE_BLOBK
1bd20 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a  EY | pOp->p5); .
1bd30 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1bd40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1bd50 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
1bd60 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
1bd70 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1bd80 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1bd90 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  db );.        as
1bda0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1bdb0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1bdc0 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
1bdd0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1bde0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
1bdf0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1be00 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f  r(pCx->pBt, pgno
1be10 2c 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  , 1, pKeyInfo, p
1be20 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1be30 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
1be40 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
1be50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1be60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1be70 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
1be80 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c   MASTER_ROOT, 1,
1be90 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72   0, pCx->pCursor
1bea0 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
1beb0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d  Table = 1;.    }
1bec0 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72  .  }.  pCx->isOr
1bed0 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1bee0 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1bef0 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1bf00 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1bf10 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1bf20 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1bf30 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1bf40 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1bf50 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1bf60 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1bf70 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1bf80 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1bf90 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1bfa0 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1bfb0 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1bfc0 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1bfd0 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1bfe0 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1bff0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1c000 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1c010 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1c020 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1c030 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1c040 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1c050 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1c060 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1c070 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1c080 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1c090 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1c0a0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1c0b0 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1c0c0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1c0d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c0e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c0f0 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1c100 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c110 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1c120 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20  ->p2, -1, 1);.  
1c130 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1c140 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1c150 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
1c160 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1c170 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1c180 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1c190 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1c1a0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1c1b0 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d  NC(db) );.  rc =
1c1c0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
1c1d0 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e  erInit(db, pOp->
1c1e0 70 33 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61  p3, pCx);.  brea
1c1f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1c200 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31   SequenceTest P1
1c210 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1c220 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f  opsis: if( curso
1c230 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63  r[P1].ctr++ ) pc
1c240 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69   = P2.**.** P1 i
1c250 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
1c260 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e  r. If the sequen
1c270 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75  ce counter is cu
1c280 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75  rrently zero, ju
1c290 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67  mp.** to P2. Reg
1c2a0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
1c2b0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75  er or not the ju
1c2c0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63  mp is taken, inc
1c2d0 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68  rement the.** th
1c2e0 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65  e sequence value
1c2f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71  ..*/.case OP_Seq
1c300 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56  uenceTest: {.  V
1c310 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1c320 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c330 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c340 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1c350 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1c360 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1c370 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a   pC->pSorter );.
1c380 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1c390 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1c3a0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1c3b0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
1c3c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1c3d0 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1c3e0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1c3f0 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e  s: P3 columns in
1c400 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65   r[P2].**.** Ope
1c410 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
1c420 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
1c430 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
1c440 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
1c450 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
1c460 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
1c470 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
1c480 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
1c490 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
1c4a0 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65  ter P2.  In othe
1c4b0 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
1c4c0 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
1c4d0 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
1c4e0 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
1c4f0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
1c500 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1c510 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1c520 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1c530 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1c540 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1c550 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1c560 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1c570 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1c580 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1c590 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1c5a0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1c5b0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1c5c0 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1c5d0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1c5e0 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1c5f0 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1c600 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1c610 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1c620 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1c630 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1c640 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1c650 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1c660 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1c670 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1c680 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1c690 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1c6a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1c6b0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1c6c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
1c6d0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1c6e0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1c6f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1c700 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
1c710 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1c720 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1c730 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
1c740 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1c750 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1c760 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73  sTable = 1;.  as
1c770 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1c780 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1c790 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1c7a0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1c7b0 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1c7c0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1c7d0 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1c7e0 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1c7f0 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1c800 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1c810 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1c820 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1c830 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c840 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1c850 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1c860 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1c870 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1c880 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1c890 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1c8a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c8b0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1c8c0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1c8d0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1c8e0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1c8f0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c900 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1c910 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1c920 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1c930 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1c940 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1c950 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1c960 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c970 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1c980 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1c990 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1c9a0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1c9b0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1c9c0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1c9d0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1c9e0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1c9f0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1ca00 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1ca10 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1ca20 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1ca30 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1ca40 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1ca50 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1ca60 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1ca70 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1ca80 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1ca90 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1caa0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1cab0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1cac0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1cad0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1cae0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1caf0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1cb00 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1cb10 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1cb20 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1cb30 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1cb40 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1cb50 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1cb60 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1cb70 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1cb80 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1cb90 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1cba0 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1cbb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1cbc0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1cbd0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1cbe0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1cbf0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cc00 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1cc10 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1cc20 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1cc30 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1cc40 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1cc50 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1cc60 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cc70 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1cc80 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1cc90 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1cca0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1ccb0 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1ccc0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1ccd0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1cce0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1ccf0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1cd00 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1cd10 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1cd20 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1cd30 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1cd40 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1cd50 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1cd60 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1cd70 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1cd80 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1cd90 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1cda0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1cdb0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1cdc0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1cdd0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1cde0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1cdf0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1ce00 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1ce10 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1ce20 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1ce30 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1ce40 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1ce50 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1ce60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1ce70 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1ce80 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1ce90 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1cea0 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1ceb0 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1cec0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ced0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1cee0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1cef0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1cf00 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1cf10 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1cf20 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1cf30 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1cf40 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1cf50 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1cf60 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1cf70 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1cf80 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1cf90 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1cfa0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1cfb0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1cfc0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1cfd0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1cfe0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1cff0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1d000 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1d010 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1d020 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1d030 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1d040 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1d050 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1d060 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1d070 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1d080 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1d090 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1d0a0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1d0b0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1d0c0 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1d0d0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1d0e0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1d0f0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1d100 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1d110 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1d120 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1d130 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1d140 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1d150 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1d160 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1d170 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1d180 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1d190 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1d1a0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1d1b0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1d1c0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1d1d0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1d1e0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1d1f0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1d200 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1d210 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1d220 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1d230 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1d240 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1d250 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1d260 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1d270 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1d280 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1d290 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1d2a0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1d2b0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1d2c0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1d2d0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1d2e0 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1d2f0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1d300 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1d310 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1d320 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1d330 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1d340 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1d350 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1d360 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1d370 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1d380 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1d390 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1d3a0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1d3b0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1d3c0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1d3d0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1d3e0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1d3f0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1d400 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1d410 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1d420 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1d430 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1d440 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1d450 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1d460 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1d470 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1d480 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d490 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1d4a0 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1d4b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1d4c0 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1d4d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d4e0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1d4f0 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1d500 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1d510 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
1d520 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  oc;.  VdbeCursor
1d530 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64   *pC;.  Unpacked
1d540 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20  Record r;.  int 
1d550 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b  nField;.  i64 iK
1d560 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ey;      /* The 
1d570 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
1d580 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  seek to */..  as
1d590 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d5a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1d5b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1d5c0 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1d5d0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d5e0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1d5f0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1d600 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1d610 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1d620 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1d630 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1d640 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1d650 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1d660 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1d670 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1d680 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1d690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d6a0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1d6b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1d6c0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
1d6d0 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1d6e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1d6f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d700 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1d710 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
1d720 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
1d730 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1d740 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1d750 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1d760 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1d770 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1d780 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
1d790 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1d7a0 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1d7b0 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1d7c0 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1d7d0 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1d7e0 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f  o convert it. */
1d7f0 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  .    pIn3 = &aMe
1d800 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1d810 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1d820 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
1d830 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
1d840 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
1d850 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1d860 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a  inity(pIn3, 0);.
1d870 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d      }.    iKey =
1d880 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1d890 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20  alue(pIn3);..   
1d8a0 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1d8b0 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  lue could not be
1d8c0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1d8d0 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
1d8e0 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f  ut.    ** loss o
1d8f0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  f information, t
1d900 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63  hen special proc
1d910 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72  essing is requir
1d920 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  ed... */.    if(
1d930 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1d940 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
1d950 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1d960 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1d970 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1d980 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1d990 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
1d9a0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
1d9b0 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
1d9c0 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  ,.        ** the
1d9d0 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
1d9e0 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
1d9f0 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
1da00 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1da10 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  2 - 1;  VdbeBran
1da20 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
1da30 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1da40 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1da50 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1da60 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67  ion iKey is larg
1da70 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1da80 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1da90 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1daa0 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20  bstitute >= for 
1dab0 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20  > and < for <=. 
1dac0 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72  e.g. if the sear
1dad0 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a  ch term.      **
1dae0 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20   is 4.9 and the 
1daf0 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d  integer approxim
1db00 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a  ation 5:.      *
1db10 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  *.      **      
1db20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20    (x >  4.9)    
1db30 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a  ->     (x >= 5).
1db40 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1db50 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e  (x <= 4.9)    ->
1db60 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20       (x <  5).  
1db70 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
1db80 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62   pIn3->u.r<(doub
1db90 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1dba0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1dbb0 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
1dbc0 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1dbd0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
1dbe0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
1dbf0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1dc00 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
1dc10 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1dc20 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
1dc30 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1dc40 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1dc50 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1dc60 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
1dc70 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1dc80 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1dc90 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
1dca0 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1dcb0 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1dcc0 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1dcd0 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
1dce0 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
1dcf0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
1dd00 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c  pIn3->u.r>(doubl
1dd10 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1dd20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1dd30 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b  kLE==(OP_SeekLT+
1dd40 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1dd50 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d  sert( OP_SeekGT=
1dd60 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29  =(OP_SeekGE+1) )
1dd70 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1dd80 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ( (OP_SeekLT & 0
1dd90 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1dda0 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GE & 0x0001) );.
1ddb0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1ddc0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1ddd0 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20  eekLT & 0x0001) 
1dde0 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  ) oc++;.      }.
1ddf0 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20      } .    rc = 
1de00 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1de10 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1de20 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1de30 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
1de40 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
1de50 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
1de60 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
1de70 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  te */.    if( rc
1de80 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1de90 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1dea0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1deb0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1dec0 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1ded0 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  4.i;.    assert(
1dee0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1def0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73  _INT32 );.    as
1df00 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
1df10 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
1df20 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1df30 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1df40 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1df50 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69    /* The next li
1df60 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75  ne of code compu
1df70 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20  tes as follows, 
1df80 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20  only faster:.   
1df90 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
1dfa0 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGT || oc==O
1dfb0 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20  P_SeekLE ){.    
1dfc0 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74  **     r.default
1dfd0 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a  _rc = -1;.    **
1dfe0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a     }else{.    **
1dff0 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
1e000 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20  c = +1;.    **  
1e010 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e   }.    */.    r.
1e020 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31  default_rc = ((1
1e030 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1e040 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b  LT)) ? -1 : +1);
1e050 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1e060 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e  =OP_SeekGT || r.
1e070 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
1e080 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1e090 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72  !=OP_SeekLE || r
1e0a0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
1e0b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1e0c0 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c!=OP_SeekGE || 
1e0d0 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
1e0e0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1e0f0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc!=OP_SeekLT ||
1e100 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
1e110 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d  1 );..    r.aMem
1e120 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1e130 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
1e140 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
1e150 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
1e160 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
1e170 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1e180 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
1e190 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70  }.#endif.    Exp
1e1a0 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b  andBlob(r.aMem);
1e1b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1e1c0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1e1d0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1e1e0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
1e1f0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
1e200 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1e210 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1e220 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1e230 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72  .  }.  pC->defer
1e240 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1e250 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1e260 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1e270 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1e280 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  ST.  sqlite3_sea
1e290 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
1e2a0 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50  dif.  if( oc>=OP
1e2b0 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65  _SeekGE ){  asse
1e2c0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
1e2d0 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  E || oc==OP_Seek
1e2e0 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  GT );.    if( re
1e2f0 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
1e300 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29  & oc==OP_SeekGT)
1e310 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1e320 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
1e330 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
1e340 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1e350 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1e360 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1e370 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e380 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
1e390 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1e3a0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1e3b0 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1e3c0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d  P_SeekLT || oc==
1e3d0 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
1e3e0 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72   if( res>0 || (r
1e3f0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1e400 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20  SeekLT) ){.     
1e410 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1e420 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1e430 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
1e440 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1e450 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1e460 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1e470 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e480 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1e490 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1e4a0 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1e4b0 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1e4c0 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1e4d0 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
1e4e0 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
1e4f0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
1e500 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
1e510 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72  treeEof(pC->pCur
1e520 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
1e530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e540 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61  2>0 );.  VdbeBra
1e550 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
1e560 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
1e570 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1e580 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1e590 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e5a0 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a  : Seek P1 P2 * *
1e5b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e5c0 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a   intkey=r[P2].**
1e5d0 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
1e5e0 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61  n table cursor a
1e5f0 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64  nd P2 is a rowid
1e600 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e   integer.  Arran
1e610 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20  ge.** for P1 to 
1e620 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20  move so that it 
1e630 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f  points to the ro
1e640 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e  wid given by P2.
1e650 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
1e660 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72  ctually a deferr
1e670 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e  ed seek.  Nothin
1e680 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65  g actually happe
1e690 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20  ns until.** the 
1e6a0 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74  cursor is used t
1e6b0 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e  o read a record.
1e6c0 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e    That way, if n
1e6d0 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72  o reads.** occur
1e6e0 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79  , no unnecessary
1e6f0 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f   I/O happens..*/
1e700 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b  .case OP_Seek: {
1e710 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
1e720 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e730 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e740 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1e750 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e760 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1e770 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1e780 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1e790 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
1e7a0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1e7b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1e7c0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1e7d0 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   0;.  pIn2 = &aM
1e7e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
1e7f0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1e800 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1e810 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70  Value(pIn2);.  p
1e820 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e830 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  o = 1;.  break;.
1e840 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
1e850 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
1e860 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1e870 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1e880 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
1e890 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
1e8a0 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1e8b0 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1e8c0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
1e8d0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
1e8e0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1e8f0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e900 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
1e910 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
1e920 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
1e930 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1e940 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1e950 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1e960 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1e970 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
1e980 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
1e990 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
1e9a0 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
1e9b0 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
1e9c0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
1e9d0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
1e9e0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1e9f0 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
1ea00 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
1ea10 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a  here it can be.*
1ea20 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68  * advanced in th
1ea30 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74  e forward direct
1ea40 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69  ion.  The Next i
1ea50 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
1ea60 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74  work,.** but not
1ea70 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75   the Prev instru
1ea80 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1ea90 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1eaa0 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74   NoConflict, Not
1eab0 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a  Exists. SeekGe.*
1eac0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
1ead0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1eae0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1eaf0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1eb00 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1eb10 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1eb20 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1eb30 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1eb40 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1eb50 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1eb60 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1eb70 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1eb80 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1eb90 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1eba0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1ebb0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1ebc0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1ebd0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1ebe0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1ebf0 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1ec00 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1ec10 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1ec20 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1ec30 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
1ec40 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
1ec50 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
1ec60 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
1ec70 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
1ec80 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
1ec90 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1eca0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
1ecb0 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
1ecc0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
1ecd0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1ece0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1ecf0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1ed00 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1ed10 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
1ed20 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
1ed30 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
1ed40 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
1ed50 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
1ed60 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
1ed70 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
1ed80 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
1ed90 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
1eda0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1edb0 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
1edc0 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ict.*/./* Opcode
1edd0 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
1ede0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1edf0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ee00 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1ee10 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1ee20 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1ee30 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1ee40 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1ee50 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1ee60 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1ee70 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1ee80 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1ee90 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1eea0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1eeb0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1eec0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1eed0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1eee0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1eef0 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
1ef00 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
1ef10 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
1ef20 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
1ef30 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
1ef40 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
1ef50 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
1ef60 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
1ef70 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
1ef80 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
1ef90 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
1efa0 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
1efb0 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
1efc0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
1efd0 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
1efe0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1eff0 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
1f000 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
1f010 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
1f020 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
1f030 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
1f040 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
1f050 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
1f060 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
1f070 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
1f080 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
1f090 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
1f0a0 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
1f0b0 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
1f0c0 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
1f0d0 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
1f0e0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
1f0f0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
1f100 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
1f110 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
1f120 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
1f130 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
1f140 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1f150 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
1f160 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
1f170 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
1f180 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
1f190 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1f1a0 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
1f1b0 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
1f1c0 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20   OP_NoConflict: 
1f1d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f1e0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46   */.case OP_NotF
1f1f0 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
1f200 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1f210 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
1f220 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f230 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
1f240 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69  yExists;.  int i
1f250 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
1f260 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
1f270 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20    char *pFree;. 
1f280 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1f290 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
1f2a0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
1f2b0 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
1f2c0 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
1f2d0 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
1f2e0 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37  izeof(Mem)*4 + 7
1f2f0 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
1f300 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
1f310 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
1f320 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
1f330 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
1f340 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
1f350 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f360 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f370 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1f380 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1f390 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
1f3a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f3b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1f3c0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
1f3d0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1f3e0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
1f3f0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
1f400 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1f410 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
1f420 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1f430 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f440 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
1f450 20 70 46 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20   pFree = 0;  /* 
1f460 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
1f470 79 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  y used to suppre
1f480 73 73 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ss a compiler wa
1f490 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20  rning. */.  if( 
1f4a0 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20  pOp->p4.i>0 ){. 
1f4b0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
1f4c0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
1f4d0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
1f4e0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
1f4f0 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a   r.aMem = pIn3;.
1f500 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
1f510 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  <r.nField; ii++)
1f520 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1f530 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1f540 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20  em[ii]) );.     
1f550 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61   ExpandBlob(&r.a
1f560 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66  Mem[ii]);.#ifdef
1f570 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1f580 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
1f590 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1f5a0 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
1f5b0 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  ii]);.#endif.   
1f5c0 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d   }.    pIdxKey =
1f5d0 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   &r;.  }else{.  
1f5e0 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69    pIdxKey = sqli
1f5f0 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61  te3VdbeAllocUnpa
1f600 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20  ckedRecord(.    
1f610 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f      pC->pKeyInfo
1f620 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65  , aTempRec, size
1f630 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70  of(aTempRec), &p
1f640 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20  Free.    );.    
1f650 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1f660 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1f670 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1f680 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
1f690 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c   );.    ExpandBl
1f6a0 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71  ob(pIn3);.    sq
1f6b0 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
1f6c0 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e  npack(pC->pKeyIn
1f6d0 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e  fo, pIn3->n, pIn
1f6e0 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a  3->z, pIdxKey);.
1f6f0 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64    }.  pIdxKey->d
1f700 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
1f710 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1f720 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  ==OP_NoConflict 
1f730 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68  ){.    /* For th
1f740 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20  e OP_NoConflict 
1f750 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65  opcode, take the
1f760 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20   jump if any of 
1f770 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74  the.    ** input
1f780 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c   fields are NULL
1f790 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20  , since any key 
1f7a0 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c  with a NULL will
1f7b0 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66   not.    ** conf
1f7c0 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28  lict */.    for(
1f7d0 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79  ii=0; ii<pIdxKey
1f7e0 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  ->nField; ii++){
1f7f0 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b  .      if( pIdxK
1f800 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61  ey->aMem[ii].fla
1f810 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1f820 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f  .        pc = pO
1f830 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42  p->p2 - 1; VdbeB
1f840 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1f850 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
1f860 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1f870 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
1f880 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1f890 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1f8a0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
1f8b0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70  &res);.  if( pOp
1f8c0 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  ->p4.i==0 ){.   
1f8d0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1f8e0 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20  b, pFree);.  }. 
1f8f0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f900 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  OK ){.    break;
1f910 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
1f920 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
1f930 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1f940 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
1f950 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
1f960 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
1f970 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1f980 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
1f990 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1f9a0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
1f9b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1f9c0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
1f9d0 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
1f9e0 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
1f9f0 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
1fa00 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1fa10 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
1fa20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
1fa30 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
1fa40 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s==0,2);.    if(
1fa50 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
1fa60 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1fa70 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1fa80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
1fa90 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
1faa0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1fab0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
1fac0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
1fad0 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
1fae0 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
1faf0 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
1fb00 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
1fb10 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
1fb20 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
1fb30 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
1fb40 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
1fb50 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
1fb60 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
1fb70 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1fb80 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
1fb90 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74   a record.** wit
1fba0 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
1fbb0 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
1fbc0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
1fbd0 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
1fbe0 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20  l.** through to 
1fbf0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1fc00 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
1fc10 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f  OP_NotFound opco
1fc20 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
1fc30 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f  same operation o
1fc40 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a  n index btrees.*
1fc50 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72  * (with arbitrar
1fc60 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65  y multi-value ke
1fc70 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ys)..**.** This 
1fc80 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1fc90 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
1fca0 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
1fcb0 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a  not be advanced.
1fcc0 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ** in either dir
1fcd0 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
1fce0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
1fcf0 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64  t and Prev opcod
1fd00 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77  es will.** not w
1fd10 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ork following th
1fd20 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
1fd30 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1fd40 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  , NotFound, NoCo
1fd50 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f  nflict.*/.case O
1fd60 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20  P_NotExists: {  
1fd70 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1fd80 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
1fd90 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1fda0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1fdb0 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79   res;.  u64 iKey
1fdc0 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ;..  pIn3 = &aMe
1fdd0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
1fde0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1fdf0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1fe00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1fe10 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1fe20 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1fe30 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1fe40 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1fe50 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
1fe60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1fe70 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a  pC->seekOp = 0;.
1fe80 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28  #endif.  assert(
1fe90 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1fea0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1feb0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1fec0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1fed0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
1fee0 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
1fef0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65    res = 0;.  iKe
1ff00 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
1ff10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ff20 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1ff30 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
1ff40 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d   0, &res);.  pC-
1ff50 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1ff60 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
1ff70 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
1ff80 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1ff90 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1ffa0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1ffb0 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
1ffc0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
1ffd0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
1ffe0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
1fff0 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 70 63  res!=0 ){.    pc
20000 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
20010 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
20020 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62 72  sult = res;.  br
20030 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20040 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
20050 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
20060 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
20070 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
20080 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
20090 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
200a0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
200b0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
200c0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
200d0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
200e0 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
200f0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
20100 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
20110 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
20120 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
20130 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
20140 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
20150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
20160 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
20170 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20180 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20190 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
201a0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
201b0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
201c0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
201d0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
201e0 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62  >seqCount++;.  b
201f0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
20200 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
20210 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
20220 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
20230 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  wid.**.** Get a 
20240 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
20250 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
20260 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
20270 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
20280 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
20290 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
202a0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
202b0 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
202c0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
202d0 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
202e0 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
202f0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
20300 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
20310 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
20320 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
20330 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
20340 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
20350 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
20360 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68   of this VDBE th
20370 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65  at holds .** the
20380 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
20390 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65  sly generated re
203a0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20  cord number. No 
203b0 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
203c0 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65  rs are.** allowe
203d0 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
203e0 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68  n this value. Wh
203f0 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
20400 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
20410 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45  m, .** an SQLITE
20420 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
20430 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
20440 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
20450 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
20460 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
20470 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
20480 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
20490 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
204a0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
204b0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
204c0 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
204d0 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
204e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
204f0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
20500 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
20510 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
20520 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
20530 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
20540 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
20550 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
20560 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
20570 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
20580 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
20590 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
205a0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
205b0 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
205c0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
205d0 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
205e0 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
205f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20610 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
20620 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
20630 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
20640 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
20650 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
20660 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
20670 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
20680 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
20690 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
206a0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
206b0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
206c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
206d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
206e0 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
206f0 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
20700 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
20710 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
20720 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
20730 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
20740 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
20750 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
20760 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
20770 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
20780 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
20790 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
207a0 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
207b0 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
207c0 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
207d0 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
207e0 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
207f0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
20800 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
20810 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
20820 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
20830 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
20840 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
20850 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
20860 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
20870 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
20880 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
20890 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
208a0 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
208b0 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
208c0 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
208d0 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
208e0 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
208f0 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
20900 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
20910 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
20920 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
20930 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
20940 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
20950 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
20960 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
20970 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
20980 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
20990 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
209a0 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
209b0 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
209c0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
209d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69  ->isTable );..#i
209e0 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
209f0 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
20a00 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
20a10 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
20a20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
20a30 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
20a40 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
20a50 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
20a60 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
20a70 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
20a80 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
20a90 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
20aa0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
20ab0 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
20ac0 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
20ad0 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
20ae0 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
20af0 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
20b00 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
20b10 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
20b20 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
20b30 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
20b40 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
20b50 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
20b60 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
20b70 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
20b80 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
20b90 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
20ba0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
20bb0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
20bc0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
20bd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20be0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
20bf0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
20c00 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50   v = 1;   /* IMP
20c10 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20  : R-61914-48074 
20c20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
20c30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20c40 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
20c50 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43  orIsValid(pC->pC
20c60 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
20c70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20c80 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
20c90 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
20ca0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
20cb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
20cc0 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66  /* Cannot fail f
20cd0 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61  ollowing BtreeLa
20ce0 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20  st() */.        
20cf0 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
20d00 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43   ){.          pC
20d10 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
20d20 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
20d30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76  lse{.          v
20d40 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  ++;   /* IMP: R-
20d50 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20  29538-34987 */. 
20d60 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
20d70 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  .    }..#ifndef 
20d80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
20d90 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66  INCREMENT.    if
20da0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
20db0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
20dc0 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
20dd0 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
20de0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20df0 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
20e00 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
20e10 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46  {.        for(pF
20e20 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
20e30 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
20e40 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
20e50 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  pParent);.      
20e60 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
20e70 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
20e80 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
20e90 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
20ea0 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
20eb0 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
20ec0 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pMem = &pFrame->
20ed0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
20ee0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20ef0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
20f00 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
20f10 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
20f20 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20f30 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
20f40 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
20f50 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
20f60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
20f70 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
20f80 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65  tToChange(p, pMe
20f90 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  m);.      }.    
20fa0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
20fb0 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20  alid(pMem) );.. 
20fc0 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
20fd0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65  ACE(pOp->p3, pMe
20fe0 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  m);.      sqlite
20ff0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
21000 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  fy(pMem);.      
21010 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
21020 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
21030 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33  =0 );  /* mem(P3
21040 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  ) holds an integ
21050 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  er */.      if( 
21060 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
21070 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
21080 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
21090 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
210a0 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
210b0 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20  : R-12275-61338 
210c0 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
210d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
210e0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
210f0 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e    if( v<pMem->u.
21100 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76  i+1 ){.        v
21110 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31   = pMem->u.i + 1
21120 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
21130 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
21140 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
21150 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f  if( pC->useRando
21160 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
21170 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  /* IMPLEMENTATIO
21180 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31  N-OF: R-07677-41
21190 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65  881 If the large
211a0 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61  st ROWID is equa
211b0 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a  l to the.      *
211c0 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  * largest possib
211d0 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33  le integer (9223
211e0 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
211f0 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
21200 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69  se.      ** engi
21210 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e  ne starts pickin
21220 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69  g positive candi
21230 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72  date ROWIDs at r
21240 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20  andom until.    
21250 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e    ** it finds on
21260 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72  e that is not pr
21270 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a  eviously used. *
21280 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
21290 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f  pOp->p3==0 );  /
212a0 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69  * We cannot be i
212b0 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d  n random rowid m
212c0 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20  ode if this is. 
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
212f0 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
21300 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20  table. */.      
21310 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
21320 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  o{.        sqlit
21330 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
21340 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
21350 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
21360 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20  ROWID>>1); v++; 
21370 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20   /* Ensure that 
21380 76 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  v is greater tha
21390 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n zero */.      
213a0 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20  }while(  ((rc = 
213b0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
213c0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
213d0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
213e0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
21420 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
21430 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
21440 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
21450 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20   (++cnt<100));. 
21460 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
21470 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
21480 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
21490 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
214a0 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
214b0 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
214c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
214d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
214e0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
214f0 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
21500 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
21510 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
21520 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
21530 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
21540 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21550 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
21560 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
21570 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21580 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
21590 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
215a0 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
215b0 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
215c0 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
215d0 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
215e0 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
215f0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
21600 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
21610 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
21620 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
21630 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
21640 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
21650 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
21660 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
21670 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
21680 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
21690 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
216a0 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
216b0 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
216c0 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
216d0 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
216e0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
216f0 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
21700 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
21710 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
21720 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
21730 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
21740 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
21750 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
21760 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
21770 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
21780 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
21790 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
217a0 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
217b0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
217c0 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
217d0 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
217e0 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
217f0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
21800 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
21810 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
21820 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73  t and if the res
21830 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61  ult of.** the la
21840 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  st seek operatio
21850 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29  n (OP_NotExists)
21860 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20   was a success, 
21870 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65  then this.** ope
21880 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20  ration will not 
21890 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
218a0 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
218b0 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67  row before doing
218c0 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62  .** the insert b
218d0 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20  ut will instead 
218e0 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f  overwrite the ro
218f0 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  w that the curso
21900 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c  r is.** currentl
21910 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  y pointing to.  
21920 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20  Presumably, the 
21930 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73  prior OP_NotExis
21940 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73  ts opcode.** has
21950 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f   already positio
21960 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63  ned the cursor c
21970 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
21980 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
21990 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74  on.** that boost
219a0 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79  s performance by
219b0 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64   avoiding redund
219c0 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a  ant seeks..**.**
219d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
219e0 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
219f0 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  set, then this o
21a00 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66  pcode is part of
21a10 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70   an.** UPDATE op
21a20 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77  eration.  Otherw
21a30 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67  ise (if the flag
21a40 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20   is clear) then 
21a50 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  this opcode.** i
21a60 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53  s part of an INS
21a70 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ERT operation.  
21a80 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
21a90 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74  s only important
21aa0 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74   to.** the updat
21ab0 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61  e hook..**.** Pa
21ac0 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
21ad0 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
21ae0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
21af0 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
21b00 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
21b10 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
21b20 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
21b30 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
21b40 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
21b50 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
21b60 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
21b70 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
21b80 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
21b90 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
21ba0 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
21bb0 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
21bc0 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
21bd0 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
21be0 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
21bf0 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
21c00 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
21c10 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
21c20 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
21c30 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
21c40 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
21c50 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
21c60 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
21c70 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
21c80 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
21c90 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
21ca0 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
21cb0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
21cc0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
21cd0 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
21ce0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
21cf0 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
21d00 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
21d10 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
21d20 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32   InsertInt P1 P2
21d30 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
21d40 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50  opsis:  intkey=P
21d50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  3 data=r[P2].**.
21d60 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
21d70 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
21d80 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
21d90 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
21da0 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
21db0 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
21dc0 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
21dd0 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
21de0 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
21df0 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
21e00 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
21e10 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
21e20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
21e30 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
21e40 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
21e50 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
21e60 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
21e70 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
21e80 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
21e90 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
21ea0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
21eb0 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
21ec0 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
21ed0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
21ee0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
21ef0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21f00 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
21f10 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
21f20 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
21f30 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
21f40 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
21f50 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
21f60 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
21f70 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
21f80 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
21f90 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
21fa0 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
21fb0 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
21fc0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
21fd0 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
21fe0 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
21ff0 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
22000 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
22010 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65  l; /* Table name
22020 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f   - used by the o
22030 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
22040 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20  int op;         
22050 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
22060 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
22070 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
22080 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
22090 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
220a0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
220b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
220c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
220d0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
220e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
220f0 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
22100 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22110 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22120 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22130 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
22140 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
22150 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
22160 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22170 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45  >isTable );.  RE
22180 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
22190 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
221a0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
221b0 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
221c0 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
221d0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
221e0 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
221f0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
22200 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
22210 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
22220 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
22230 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
22240 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65  ;.    iKey = pKe
22250 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
22260 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
22270 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
22280 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b  ertInt );.    iK
22290 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
222a0 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
222b0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
222c0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
222d0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
222e0 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
222f0 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
22300 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
22310 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61   iKey;.  if( pDa
22320 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
22330 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
22340 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
22350 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
22360 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
22370 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
22380 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
22390 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b  r) );.  }.  seek
223a0 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
223b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
223c0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
223d0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
223e0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
223f0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
22400 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  ){.    nZero = p
22410 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
22420 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72   }else{.    nZer
22430 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20  o = 0;.  }.  rc 
22440 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
22450 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  sert(pC->pCursor
22460 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70       pData->z, p
22490 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a  Data->n, nZero,.
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224b0 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
224c0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
224d0 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75  ND)!=0, seekResu
224e0 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
224f0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22500 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
22510 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22520 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
22530 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
22540 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
22550 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22560 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
22570 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
22580 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
22590 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
225a0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
225b0 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
225c0 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
225d0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
225e0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
225f0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
22600 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
22610 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
22620 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
22630 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
22640 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
22650 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
22660 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
22670 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
22680 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22690 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
226a0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
226b0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
226c0 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
226d0 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
226e0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
226f0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
22700 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
22710 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
22720 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
22730 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
22740 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
22750 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
22760 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
22770 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
22780 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
22790 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
227a0 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
227b0 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
227c0 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
227d0 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
227e0 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
227f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
22800 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
22810 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
22820 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
22830 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
22840 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
22850 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
22860 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
22870 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
22880 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
22890 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
228a0 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
228b0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
228c0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
228d0 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
228e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
228f0 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
22900 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
22910 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
22920 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
22930 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
22940 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
22950 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
22960 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
22970 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
22980 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
22990 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
229a0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
229b0 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
229c0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
229d0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
229e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
229f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22a00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22a10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22a20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22a30 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
22a40 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a  Cursor!=0 );  /*
22a50 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20   Only valid for 
22a60 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20  real tables, no 
22a70 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a  pseudotables */.
22a80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
22a90 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
22aa0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
22ab0 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54 68 65  E_DEBUG.  /* The
22ac0 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
22ad0 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
22ae0 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
22af0 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77 69   to OP_Delete wi
22b00 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c 73  ll.  ** have als
22b10 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
22b20 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
22b30 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
22b40 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20   the row that.  
22b50 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  ** is being dele
22b60 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ted */.  if( pOp
22b70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73  ->p4.z && pC->is
22b80 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 69 36 34  Table ){.    i64
22b90 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73   iKey = 0;.    s
22ba0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
22bb0 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
22bc0 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65  &iKey);.    asse
22bd0 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  rt( pC->movetoTa
22be0 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20  rget==iKey ); . 
22bf0 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 72 63   }.#endif. .  rc
22c00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22c10 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
22c20 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
22c30 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22c40 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
22c50 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
22c60 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
22c70 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
22c80 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
22c90 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
22ca0 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d  pOp->p4.z && pC-
22cb0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
22cc0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
22cd0 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
22ce0 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
22cf0 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
22d00 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61             db->a
22d10 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
22d20 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43  e, pOp->p4.z, pC
22d30 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
22d40 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22d50 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
22d60 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
22d70 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
22d80 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
22d90 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
22da0 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
22db0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
22dc0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
22dd0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
22de0 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
22df0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
22e00 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
22e10 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
22e20 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
22e30 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
22e40 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
22e50 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
22e60 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
22e70 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
22e80 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
22e90 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
22ea0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
22eb0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
22ec0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
22ed0 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
22ee0 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
22ef0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
22f00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
22f10 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
22f20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
22f30 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d  s:  if key(P1)!=
22f40 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67  trim(r[P3],P4) g
22f50 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  oto P2.**.** P1 
22f60 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
22f70 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  or. This instruc
22f80 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20  tion compares a 
22f90 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a  prefix of the.**
22fa0 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20   record blob in 
22fb0 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69  register P3 agai
22fc0 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20  nst a prefix of 
22fd0 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a  the entry that .
22fe0 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75  ** the sorter cu
22ff0 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70  rsor currently p
23000 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20  oints to.  Only 
23010 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65  the first P4 fie
23020 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20  lds.** of r[P3] 
23030 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72  and the sorter r
23040 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72  ecord are compar
23050 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  ed..**.** If eit
23060 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f  her P3 or the so
23070 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20  rter contains a 
23080 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74  NULL in one of t
23090 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74  heir significant
230a0 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20  .** fields (not 
230b0 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20  counting the P4 
230c0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
230d0 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f  d which are igno
230e0 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65  red) then.** the
230f0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
23100 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75  ssumed to be equ
23110 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  al..**.** Fall t
23120 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69  hrough to next i
23130 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68  nstruction if th
23140 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f  e two records co
23150 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a  mpare equal to.*
23160 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a  * each other.  J
23170 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
23180 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e  y are different.
23190 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
231a0 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56  erCompare: {.  V
231b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
231c0 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
231d0 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d  nKeyCol;..  pC =
231e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
231f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
23200 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
23210 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
23220 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
23230 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
23240 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79  pOp->p3];.  nKey
23250 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Col = pOp->p4.i;
23260 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
23270 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
23280 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20  rterCompare(pC, 
23290 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26  pIn3, nKeyCol, &
232a0 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  res);.  VdbeBran
232b0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
232c0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
232d0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
232e0 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
232f0 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
23300 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
23310 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
23320 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
23330 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23340 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23350 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20   current sorter 
23360 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20  data for sorter 
23370 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
23380 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c  en clear the col
23390 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65  umn header cache
233a0 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a   on cursor P3..*
233b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
233c0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65   is normally use
233d0 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72   to move a recor
233e0 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72  d out of the sor
233f0 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20  ter and into.** 
23400 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
23410 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f  is the source fo
23420 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  r a pseudo-table
23430 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20   cursor created 
23440 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65  using.** OpenPse
23450 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64  udo.  That pseud
23460 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  o-table cursor i
23470 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69  s the one that i
23480 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a  s identified by.
23490 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e  ** parameter P3.
234a0 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50    Clearing the P
234b0 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61  3 column cache a
234c0 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f  s part of this o
234d0 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75  pcode saves.** u
234e0 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f  s from having to
234f0 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74   issue a separat
23500 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75  e NullRow instru
23510 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74  ction to clear t
23520 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61  hat cache..*/.ca
23530 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61  se OP_SorterData
23540 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
23550 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   *pC;..  pOut = 
23560 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
23570 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23580 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23590 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
235a0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
235b0 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
235c0 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20  ey(pC, pOut);.  
235d0 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49  assert( rc!=SQLI
235e0 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e  TE_OK || (pOut->
235f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
23600 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
23610 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23620 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23630 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
23640 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61  p->p3]->cacheSta
23650 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
23660 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
23670 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
23680 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
23690 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
236a0 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
236b0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
236c0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
236d0 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
236e0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
236f0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
23700 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
23710 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
23720 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
23730 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
23740 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
23750 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
23760 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
23770 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
23780 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
23790 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
237a0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
237b0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
237c0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
237d0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
237e0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
237f0 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
23800 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
23810 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
23820 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
23830 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
23840 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
23850 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
23860 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
23870 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
23880 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
23890 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
238a0 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
238b0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
238c0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
238d0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
238e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
238f0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
23900 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
23910 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
23920 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
23930 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
23940 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
23950 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
23960 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
23970 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
23980 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
23990 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
239a0 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
239b0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
239c0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
239d0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
239e0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
239f0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
23a00 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
23a10 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
23a20 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
23a30 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
23a40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23a50 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23a60 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
23a70 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
23a80 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
23a90 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
23aa0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
23ab0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
23ac0 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
23ad0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
23ae0 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  ble==0 || pOp->o
23af0 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
23b00 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
23b10 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23b20 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
23b30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23b40 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
23b50 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
23b60 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
23b70 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
23b80 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  >pCursor;..  /* 
23b90 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e  The OP_RowKey an
23ba0 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  d OP_RowData opc
23bb0 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
23bc0 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
23bd0 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e  or.  ** OP_Rewin
23be0 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
23bf0 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
23c00 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20  structions that 
23c10 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
23c20 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  .  ** the cursor
23c30 2e 20 20 49 66 20 74 68 69 73 20 77 68 65 72 65  .  If this where
23c40 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
23c50 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
23c60 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
23c70 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
23c80 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
23c90 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
23ca0 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
23cb0 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
23cc0 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
23cd0 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
23ce0 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
23cf0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
23d00 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
23d10 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
23d20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23d30 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
23d40 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
23d50 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
23d60 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
23d70 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
23d80 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
23d90 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
23da0 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
23db0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
23dc0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
23dd0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
23de0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
23df0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
23e00 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d  endif..  if( pC-
23e10 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
23e20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
23e30 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
23e40 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
23e50 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
23e60 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
23e70 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
23e80 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
23e90 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
23ea0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
23eb0 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
23ec0 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
23ed0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
23ee0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
23ef0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
23f00 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
23f10 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
23f20 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
23f30 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
23f40 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
23f50 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
23f60 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
23f70 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
23f80 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
23f90 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
23fa0 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
23fb0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
23fc0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
23fd0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
23fe0 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
23ff0 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73   n==0 );.  if( s
24000 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
24010 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
24020 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a  , MAX(n,32)) ){.
24030 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
24040 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
24050 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
24060 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
24070 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
24080 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
24090 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
240a0 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
240b0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
240c0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
240d0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
240e0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
240f0 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
24100 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
24110 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
24120 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
24130 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
24140 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
24150 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
24160 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
24170 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
24180 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
24190 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
241a0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
241b0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
241c0 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
241d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
241e0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
241f0 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
24200 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
24210 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
24220 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
24230 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
24240 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
24250 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
24260 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
24270 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
24280 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
24290 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
242a0 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
242b0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
242c0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
242d0 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
242e0 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
242f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
24300 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
24310 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
24320 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
24330 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
24340 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33  i64 v;.  sqlite3
24350 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
24360 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
24370 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
24380 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24390 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
243a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
243b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
243c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
243d0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
243e0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
243f0 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43  ableReg==0 || pC
24400 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
24410 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
24420 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
24430 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
24440 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
24450 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
24460 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
24470 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
24480 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
24490 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
244a0 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
244b0 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
244c0 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d  r ){.    pVtab =
244d0 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72   pC->pVtabCursor
244e0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
244f0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
24500 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
24510 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
24520 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
24530 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
24540 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
24550 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
24560 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
24570 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64  (p, pVtab);.#end
24580 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
24590 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
245a0 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
245b0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
245c0 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
245d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
245e0 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
245f0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
24600 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24610 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
24620 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
24630 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
24640 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
24650 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
24660 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24670 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
24680 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
24690 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
246a0 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c  ITE_OK );  /* Al
246b0 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65 20  ways so because 
246c0 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f 72 65  of CursorRestore
246d0 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a  () above */.  }.
246e0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
246f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24700 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
24710 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
24720 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
24730 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
24740 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
24750 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
24760 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
24770 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
24780 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
24790 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
247a0 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
247b0 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
247c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
247d0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
247e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
247f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24800 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24810 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24820 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24830 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24840 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  1;.  pC->cacheSt
24850 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24860 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43  LE;.  if( pC->pC
24870 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  ursor ){.    sql
24880 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
24890 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
248a0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
248b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  }../* Opcode: La
248c0 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
248d0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
248e0 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
248f0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
24900 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
24910 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
24920 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
24930 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
24940 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
24950 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
24960 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
24970 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
24980 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
24990 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
249a0 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
249b0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
249c0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
249d0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
249e0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
249f0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
24a00 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
24a10 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
24a20 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
24a30 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
24a40 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
24a50 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
24a60 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
24a70 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24a80 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
24a90 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
24aa0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
24ab0 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  xt..*/.case OP_L
24ac0 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ast: {        /*
24ad0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
24ae0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
24af0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
24b00 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
24b10 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24b20 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24b30 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24b40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24b50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24b60 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
24b70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65  C->pCursor;.  re
24b80 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
24b90 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
24ba0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24bb0 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  Last(pCrsr, &res
24bc0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
24bd0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43   = (u8)res;.  pC
24be0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
24bf0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
24c00 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24c10 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
24c20 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
24c30 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73  >seekOp = OP_Las
24c40 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
24c50 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
24c60 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
24c70 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
24c80 69 66 28 20 72 65 73 20 29 20 70 63 20 3d 20 70  if( res ) pc = p
24c90 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
24ca0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
24cb0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
24cc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
24cd0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
24ce0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
24cf0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
24d00 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
24d10 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
24d20 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
24d30 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
24d40 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
24d50 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
24d60 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
24d70 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
24d80 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
24d90 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
24da0 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
24db0 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
24dc0 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
24dd0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
24de0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
24df0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
24e00 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
24e10 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
24e20 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
24e30 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
24e40 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
24e50 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
24e60 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
24e70 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
24e80 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
24e90 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
24ea0 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
24eb0 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
24ec0 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
24ed0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
24ee0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
24ef0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
24f00 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
24f10 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
24f20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
24f30 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
24f40 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
24f50 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
24f60 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
24f70 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
24f80 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
24f90 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
24fa0 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
24fb0 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
24fc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
24fd0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
24fe0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
24ff0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
25000 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
25010 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
25020 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
25030 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
25040 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
25050 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
25060 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
25070 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
25080 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
25090 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
250a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
250b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
250c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
250d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
250e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
250f0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
25100 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
25110 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
25120 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
25130 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
25140 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
25150 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
25160 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
25170 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
25180 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
25190 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
251a0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
251b0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
251c0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
251d0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
251e0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
251f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25200 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25210 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
25220 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25230 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
25240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
25250 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
25260 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
25270 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
25280 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
25290 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
252a0 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
252b0 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
252c0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
252d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
252e0 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
252f0 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
25300 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20  else{.    pCrsr 
25310 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
25320 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
25330 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
25340 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
25350 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
25360 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25370 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
25380 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25390 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a  ACHE_STALE;.  }.
253a0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
253b0 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
253c0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
253d0 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
253e0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
253f0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
25400 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
25410 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
25420 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25430 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
25440 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
25450 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
25460 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
25470 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
25480 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
25490 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
254a0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
254b0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
254c0 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
254d0 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
254e0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
254f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
25500 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
25510 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
25520 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
25530 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
25540 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
25550 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63  .** The Next opc
25560 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
25570 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
25580 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
25590 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f  r.** OP_Rewind o
255a0 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
255b0 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
255c0 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20  r.  Next is not 
255d0 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
255e0 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65  llow SeekLT, See
255f0 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e  kLE, or OP_Last.
25600 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
25610 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
25620 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
25630 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
25640 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65  e.  P1 must have
25650 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20  .** been opened 
25660 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70  prior to this op
25670 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67  code or the prog
25680 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c  ram will segfaul
25690 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  t..**.** The P3 
256a0 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20  value is a hint 
256b0 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70  to the btree imp
256c0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20  lementation. If 
256d0 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d  P3==1, that.** m
256e0 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51  eans P1 is an SQ
256f0 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74  L index and that
25700 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
25710 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  n could have bee
25720 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20  n.** omitted if 
25730 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62  that index had b
25740 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20  een unique.  P3 
25750 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50  is usually 0.  P
25760 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65  3 is.** always e
25770 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
25780 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
25790 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
257a0 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
257b0 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
257c0 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
257d0 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a  reeNext()..**.**
257e0 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
257f0 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
25800 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
25810 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
25820 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
25830 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
25840 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
25850 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
25860 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74  also: Prev, Next
25870 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IfOpen.*/./* Opc
25880 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20  ode: NextIfOpen 
25890 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
258a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
258b0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
258c0 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61   Next except tha
258d0 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
258e0 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
258f0 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
25900 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
25910 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34  Prev P1 P2 P3 P4
25920 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75   P5.**.** Back u
25930 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  p cursor P1 so t
25940 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
25950 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65   the previous ke
25960 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
25970 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
25980 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
25990 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b  is no previous k
259a0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
259b0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
259c0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
259d0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
259e0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
259f0 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20  rsor backup was 
25a00 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
25a10 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
25a20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  to P2..**.**.** 
25a30 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
25a40 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
25a50 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c  llowing an SeekL
25a60 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a  T, SeekLE, or.**
25a70 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20   OP_Last opcode 
25a80 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
25a90 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72   the cursor.  Pr
25aa0 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  ev is not allowe
25ab0 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
25ac0 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
25ad0 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a  r OP_Rewind..**.
25ae0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
25af0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
25b00 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
25b10 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
25b20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20  If P1 is.** not 
25b30 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65  open then the be
25b40 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
25b50 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ned..**.** The P
25b60 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
25b70 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
25b80 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
25b90 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
25ba0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
25bb0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
25bc0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
25bd0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
25be0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
25bf0 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
25c00 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
25c10 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
25c20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
25c30 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
25c40 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
25c50 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
25c60 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
25c70 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
25c80 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
25c90 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e  BtreePrevious().
25ca0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
25cb0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
25cc0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
25cd0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
25ce0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
25cf0 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
25d00 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
25d10 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f  ncremented..*/./
25d20 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66  * Opcode: PrevIf
25d30 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
25d40 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
25d50 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
25d60 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70   like Prev excep
25d70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
25d80 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
25d90 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
25da0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
25db0 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20  P_SorterNext: { 
25dc0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
25dd0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25de0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d  int res;..  pC =
25df0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25e00 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
25e10 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
25e20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
25e30 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
25e40 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72  rNext(db, pC, &r
25e50 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74  es);.  goto next
25e60 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50  _tail;.case OP_P
25e70 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  revIfOpen:    /*
25e80 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
25e90 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20  _NextIfOpen:    
25ea0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
25eb0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25ec0 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  1]==0 ) break;. 
25ed0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
25ee0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76   */.case OP_Prev
25ef0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25f00 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
25f10 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt:          /* 
25f20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
25f30 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25f40 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25f50 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
25f60 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a  pOp->p5<ArraySiz
25f70 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29  e(p->aCounter) )
25f80 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25f90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65  r[pOp->p1];.  re
25fa0 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  s = pOp->p3;.  a
25fb0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25fc0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
25fd0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
25fe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25ff0 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >pCursor );.  as
26000 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20  sert( res==0 || 
26010 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69  (res==1 && pC->i
26020 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20  sTable==0) );.  
26030 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31  testcase( res==1
26040 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26050 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
26060 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
26070 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
26080 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
26090 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
260a0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
260b0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
260c0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
260d0 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74  ious );.  assert
260e0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
260f0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20  P_NextIfOpen || 
26100 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
26110 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
26120 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
26130 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
26140 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f  PrevIfOpen || pO
26150 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
26160 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
26170 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ious);..  /* The
26180 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20   Next opcode is 
26190 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
261a0 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
261b0 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a  and Rewind..  **
261c0 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65   The Prev opcode
261d0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
261e0 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  ter SeekLT, Seek
261f0 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f  LE, and Last. */
26200 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26210 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
26220 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
26230 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20  OP_NextIfOpen.  
26240 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
26250 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  Op==OP_SeekGT ||
26260 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
26270 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c  SeekGE.       ||
26280 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
26290 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65  Rewind || pC->se
262a0 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b  ekOp==OP_Found);
262b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
262c0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
262d0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
262e0 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20  OP_PrevIfOpen.  
262f0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
26300 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  Op==OP_SeekLT ||
26310 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
26320 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c  SeekLE.       ||
26330 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
26340 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20  Last );..  rc = 
26350 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
26360 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
26370 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a  es);.next_tail:.
26380 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26390 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
263a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
263b0 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20  en(res==0,2);.  
263c0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
263d0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
263e0 30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  0;.    pc = pOp-
263f0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e  >p2 - 1;.    p->
26400 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35  aCounter[pOp->p5
26410 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
26420 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
26430 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
26440 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  ++;.#endif.  }el
26450 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  se{.    pC->null
26460 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67  Row = 1;.  }.  g
26470 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
26480 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
26490 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
264a0 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
264b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
264c0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
264d0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
264e0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
264f0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
26500 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
26510 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
26520 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
26530 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
26540 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
26550 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
26560 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
26570 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
26580 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
26590 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
265a0 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
265b0 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
265c0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
265d0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
265e0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
265f0 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
26600 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
26610 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
26620 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
26630 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
26640 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
26650 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
26660 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
26670 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
26680 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
26690 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
266a0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
266b0 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
266c0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
266d0 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
266e0 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
266f0 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
26700 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
26710 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
26720 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
26730 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
26740 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
26750 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
26760 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
26770 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
26780 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
26790 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
267a0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
267b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
267c0 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
267d0 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
267e0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
267f0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
26800 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
26810 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
26820 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  sr;.  int nKey;.
26830 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
26840 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ey;..  assert( p
26850 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26860 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26870 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26880 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26890 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
268a0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
268b0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
268c0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
268d0 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
268e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
268f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
26900 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
26910 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
26920 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
26930 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
26940 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
26950 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
26960 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
26970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26980 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
26990 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
269a0 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63  (pIn2);.  if( rc
269b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
269c0 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28     if( isSorter(
269d0 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pC) ){.      rc 
269e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
269f0 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e  terWrite(pC, pIn
26a00 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  2);.    }else{. 
26a10 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
26a20 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
26a30 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
26a40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26a50 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
26a60 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
26a70 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
26a80 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
26a90 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
26aa0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
26ab0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
26ac0 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20  ).          );. 
26ad0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
26ae0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
26af0 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  =0 );.      pC->
26b00 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26b10 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d  CHE_STALE;.    }
26b20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26b30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
26b40 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
26b50 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
26b60 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
26b70 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
26b80 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
26b90 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
26ba0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
26bb0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
26bc0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
26bd0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
26be0 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
26bf0 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
26c00 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
26c10 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
26c20 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
26c30 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
26c40 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
26c50 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
26c60 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
26c70 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
26c80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26c90 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
26ca0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
26cb0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
26cc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26cd0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26ce0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26cf0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26d00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26d10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26d20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
26d30 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
26d40 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
26d50 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
26d60 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
26d70 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
26d80 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
26d90 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
26da0 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
26db0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
26dc0 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66  pOp->p2];.#ifdef
26dd0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26de0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
26df0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
26e00 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
26e10 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
26e20 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
26e30 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26e40 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
26e50 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
26e60 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
26e70 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
26e80 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  es==0 ){.    rc 
26e90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
26ea0 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d  lete(pCrsr);.  }
26eb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
26ec0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26ed0 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
26ee0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26ef0 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
26f00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
26f10 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
26f20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
26f30 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
26f40 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26f50 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
26f60 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
26f70 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
26f80 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
26f90 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
26fa0 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
26fb0 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
26fc0 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
26fd0 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
26fe0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
26ff0 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
27000 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
27010 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
27020 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
27030 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
27040 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
27050 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
27060 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
27070 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  ase */.  BtCurso
27080 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65  r *pCrsr;.  Vdbe
27090 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
270a0 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65  4 rowid;..  asse
270b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
270c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
270d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
270e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
270f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27100 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
27110 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
27120 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
27130 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
27140 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73  = MEM_Null;.  as
27150 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
27160 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
27170 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
27180 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a  veto==0 );..  /*
27190 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f   sqlite3VbeCurso
271a0 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f  rRestore() can o
271b0 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20  nly fail if the 
271c0 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20  record has been 
271d0 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74  deleted.  ** out
271e0 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20   from under the 
271f0 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69  cursor.  That wi
27200 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 64  ll never happend
27210 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64   for an IdxRowid
27220 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20 68 65  .  ** opcode, he
27230 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28 29 20  nce the NEVER() 
27240 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68 65 63  arround the chec
27250 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20  k of the return 
27260 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 72 63  value..  */.  rc
27270 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
27280 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
27290 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
272a0 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
272b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
272c0 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70  error;..  if( !p
272d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
272e0 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a    rowid = 0;  /*
272f0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
27300 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
27310 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
27320 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
27330 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
27340 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
27350 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
27360 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
27370 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27380 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
27390 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
273a0 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d  rowid;.    pOut-
273b0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
273c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
273d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
273e0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
273f0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
27400 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
27410 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
27420 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
27430 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
27440 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
27450 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
27460 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
27470 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
27480 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
27490 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
274a0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
274b0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
274c0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
274d0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
274e0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
274f0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
27500 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
27510 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
27520 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
27530 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
27540 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
27550 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
27560 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
27570 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
27580 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
27590 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31  Opcode: IdxGT P1
275a0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
275b0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
275c0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
275d0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
275e0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
275f0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
27600 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
27610 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
27620 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
27630 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
27640 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
27650 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
27660 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
27670 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
27680 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
27690 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
276a0 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
276b0 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
276c0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
276d0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
276e0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
276f0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
27700 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
27710 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
27720 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
27730 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
27740 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
27750 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
27760 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
27770 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
27780 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
27790 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
277a0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
277b0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
277c0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
277d0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
277e0 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
277f0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
27800 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
27810 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
27820 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
27830 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
27840 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27850 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
27860 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
27870 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27880 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
27890 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
278a0 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
278b0 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
278c0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
278d0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
278e0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
278f0 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20  pcode: IdxLE P1 
27900 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
27910 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
27920 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
27930 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
27940 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
27950 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
27960 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
27970 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
27980 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
27990 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
279a0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
279b0 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
279c0 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
279d0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
279e0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
279f0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27a00 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
27a10 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
27a20 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27a30 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
27a40 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
27a50 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
27a60 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
27a70 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66   P2. Otherwise f
27a80 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
27a90 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
27aa0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
27ab0 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20  IdxLE:          
27ac0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
27ad0 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20  OP_IdxGT:       
27ae0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27af0 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
27b00 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27b10 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
27b20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
27b30 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
27b40 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
27b50 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
27b60 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
27b70 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27b80 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27b90 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27ba0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27bb0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27bc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
27bd0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
27be0 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
27bf0 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28  r!=0);.  assert(
27c00 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27c10 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
27c20 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
27c30 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
27c40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27c50 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
27c60 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
27c70 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
27c80 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
27c90 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69  6)pOp->p4.i;.  i
27ca0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f  f( pOp->opcode<O
27cb0 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61  P_IdxLT ){.    a
27cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
27cd0 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
27ce0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27cf0 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxGT );.    r.d
27d00 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
27d10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
27d20 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27d30 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
27d40 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27d50 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xLT );.    r.def
27d60 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d  ault_rc = 0;.  }
27d70 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
27d80 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
27d90 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
27da0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
27db0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
27dc0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
27dd0 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
27de0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
27df0 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e    res = 0;  /* N
27e00 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
27e10 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
27e20 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
27e30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
27e40 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64  eIdxKeyCompare(d
27e50 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29  b, pC, &r, &res)
27e60 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f  ;.  assert( (OP_
27e70 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxLE&1)==(OP_Id
27e80 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64  xLT&1) && (OP_Id
27e90 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47  xGE&1)==(OP_IdxG
27ea0 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70  T&1) );.  if( (p
27eb0 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28  Op->opcode&1)==(
27ec0 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20  OP_IdxLT&1) ){. 
27ed0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
27ee0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
27ef0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
27f00 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
27f10 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d   res = -res;.  }
27f20 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27f30 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
27f40 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
27f50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
27f60 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20   );.    res++;. 
27f70 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
27f80 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20  aken(res>0,2);. 
27f90 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
27fa0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
27fb0 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1 ;.  }.  break
27fc0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27fd0 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
27fe0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
27ff0 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
28000 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
28010 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
28020 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
28030 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
28040 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
28050 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
28060 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
28070 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
28080 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
28090 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
280a0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
280b0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
280c0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
280d0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
280e0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
280f0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
28100 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
28110 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
28120 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
28130 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
28140 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
28150 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
28160 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
28170 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
28180 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
28190 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
281a0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
281b0 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
281c0 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
281d0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
281e0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
281f0 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
28200 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
28210 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
28220 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
28230 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
28240 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
28250 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
28260 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20  P2.  If no page 
28270 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  .** movement was
28280 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
28290 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  se the table bei
282a0 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
282b0 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c  lready .** the l
282c0 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
282d0 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
282e0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
282f0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
28300 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
28310 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
28320 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
28330 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
28340 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
28350 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
28360 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
28370 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
28380 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
28390 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74  oved;.  int iCnt
283a0 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  ;.  Vdbe *pVdbe;
283b0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
283c0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
283d0 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  ly==0 );.#ifndef
283e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
283f0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
28400 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
28410 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
28420 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
28430 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
28440 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
28450 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
28460 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61  && pVdbe->bIsRea
28470 64 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64  der .     && pVd
28480 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64  be->inVtabMethod
28490 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e  <2 && pVdbe->pc>
284a0 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  =0 .    ){.     
284b0 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
284c0 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
284d0 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b  = db->nVdbeRead;
284e0 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
284f0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
28500 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
28510 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
28520 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
28530 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
28540 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
28550 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
28560 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
28570 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
28580 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
28590 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
285a0 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f   iDb) );.    iMo
285b0 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ved = 0;  /* Not
285c0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74   needed.  Only t
285d0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
285e0 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
285f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
28600 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
28610 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
28620 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
28630 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
28640 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
28650 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
28660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28670 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
28680 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28690 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
286a0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
286b0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64  3RootPageMoved(d
286c0 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20  b, iDb, iMoved, 
286d0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20  pOp->p1);.      
286e0 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f  /* All OP_Destro
286f0 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  y operations occ
28700 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62  ur on the same b
28710 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73  tree */.      as
28720 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d  sert( resetSchem
28730 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72  aOnFault==0 || r
28740 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
28750 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20  t==iDb+1 );.    
28760 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46    resetSchemaOnF
28770 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20  ault = iDb+1;.  
28780 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
28790 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
287a0 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
287b0 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
287c0 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
287d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
287e0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
287f0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
28800 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28810 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
28820 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
28830 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
28840 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
28850 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28860 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
28870 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
28880 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
28890 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
288a0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
288b0 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
288c0 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
288d0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
288e0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
288f0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
28900 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
28910 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
28920 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
28930 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
28940 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
28950 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
28960 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
28970 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
28980 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
28990 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
289a0 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
289b0 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
289c0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
289d0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
289e0 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
289f0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
28a00 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
28a10 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
28a20 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
28a30 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
28a40 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
28a50 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
28a60 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
28a70 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
28a80 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
28a90 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
28aa0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
28ab0 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
28ac0 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
28ad0 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
28ae0 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
28af0 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
28b00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
28b10 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
28b20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
28b30 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
28b40 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72   pOp->p2) );.  r
28b50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
28b60 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
28b70 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
28b80 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
28b90 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
28ba0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
28bb0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
28bc0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
28bd0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
28be0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
28bf0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
28c00 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
28c10 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
28c20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
28c30 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
28c40 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
28c50 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
28c60 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
28c70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28c80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
28c90 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
28ca0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
28cb0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
28cc0 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
28cd0 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
28ce0 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
28cf0 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
28d00 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28d10 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
28d20 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
28d30 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
28d40 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
28d50 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
28d60 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
28d70 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
28d80 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
28d90 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
28da0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
28db0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
28dc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
28dd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
28de0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28df0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
28e00 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20  >pSorter ){.    
28e10 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
28e20 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70  rReset(db, pC->p
28e30 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
28e40 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
28e50 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
28e60 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28e70 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
28e80 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  OfCursor(pC->pCu
28e90 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
28ea0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28eb0 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
28ec0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
28ed0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
28ee0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
28ef0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
28f00 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
28f10 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
28f20 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
28f30 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
28f40 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
28f50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
28f60 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
28f70 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
28f80 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
28f90 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
28fa0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
28fb0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
28fc0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
28fd0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
28fe0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
28ff0 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
29000 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
29010 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
29020 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
29030 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
29040 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
29050 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
29060 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
29070 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
29080 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
29090 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
290a0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
290b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
290c0 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
290d0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
290e0 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
290f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
29100 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
29110 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
29120 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
29130 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
29140 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
29150 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
29160 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
29170 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
29180 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
29190 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
291a0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
291b0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
291c0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
291d0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
291e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
291f0 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
29200 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
29210 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
29220 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
29230 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
29240 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
29250 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
29260 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67  pgno;.  int flag
29270 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  s;.  Db *pDb;.. 
29280 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
29290 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
292a0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
292b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
292c0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
292d0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
292e0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
292f0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
29300 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
29310 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
29320 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
29330 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
29340 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
29350 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
29360 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
29370 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
29380 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
29390 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
293a0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
293b0 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
293c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
293d0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
293e0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
293f0 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
29400 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
29410 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
29420 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
29430 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
29440 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
29450 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
29460 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
29470 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
29480 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
29490 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
294a0 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
294b0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
294c0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
294d0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
294e0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
294f0 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
29500 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
29510 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
29520 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
29530 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
29540 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
29550 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
29560 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
29570 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
29580 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
29590 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
295a0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
295b0 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
295c0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
295d0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
295e0 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
295f0 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
29600 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
29610 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
29620 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
29630 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
29640 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
29650 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
29660 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
29670 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
29680 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
29690 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
296a0 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
296b0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
296c0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
296d0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
296e0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
296f0 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
29700 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
29710 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
29720 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
29730 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
29740 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
29750 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
29760 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
29770 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
29780 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
29790 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
297a0 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
297b0 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
297c0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
297d0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
297e0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
297f0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
29800 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
29810 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
29820 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
29830 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
29840 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
29850 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
29860 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
29870 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
29880 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
29890 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
298a0 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
298b0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
298c0 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
298d0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
298e0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
298f0 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
29900 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
29910 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
29920 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
29930 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
29940 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
29950 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
29960 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
29970 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
29980 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
29990 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
299a0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
299b0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
299c0 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
299d0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
299e0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
299f0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
29a00 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
29a10 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
29a20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
29a30 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
29a40 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
29a50 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
29a60 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
29a70 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
29a80 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
29a90 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
29aa0 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
29ab0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
29ac0 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
29ad0 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
29ae0 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
29af0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
29b00 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
29b10 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
29b20 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
29b30 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
29b40 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
29b50 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
29b60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
29b70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
29b80 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
29b90 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
29ba0 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
29bb0 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
29bc0 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
29bd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
29be0 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
29bf0 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
29c00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
29c10 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
29c20 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
29c30 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
29c40 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
29c50 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
29c60 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
29c70 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
29c80 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
29c90 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
29ca0 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
29cb0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
29cc0 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
29cd0 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
29ce0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
29cf0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
29d00 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
29d10 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
29d20 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
29d30 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a  se OP_DropTable:
29d40 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
29d50 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
29d60 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
29d70 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
29d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29d90 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
29da0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
29db0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
29dc0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
29dd0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
29de0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
29df0 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
29e00 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
29e10 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
29e20 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
29e30 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
29e40 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
29e50 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
29e60 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
29e70 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
29e80 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
29e90 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
29ea0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
29eb0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
29ec0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
29ed0 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
29ee0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
29ef0 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
29f00 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
29f10 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
29f20 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
29f30 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
29f40 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
29f50 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
29f60 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
29f70 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
29f80 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
29f90 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
29fa0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
29fb0 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
29fc0 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
29fd0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
29fe0 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
29ff0 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2a000 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2a010 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2a020 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2a030 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2a040 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2a050 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2a060 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2a070 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
2a080 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a090 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
2a0a0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2a0b0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2a0c0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
2a0d0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2a0e0 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
2a0f0 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
2a100 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
2a110 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
2a120 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
2a130 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
2a140 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
2a150 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
2a160 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
2a170 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
2a180 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
2a190 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
2a1a0 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
2a1b0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
2a1c0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2a1d0 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
2a1e0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
2a1f0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
2a200 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
2a210 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
2a220 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
2a230 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
2a240 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2a250 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
2a260 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
2a270 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
2a280 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
2a290 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
2a2a0 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
2a2b0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2a2c0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
2a2d0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
2a2e0 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
2a2f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
2a300 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
2a310 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
2a320 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
2a330 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
2a340 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
2a350 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
2a360 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
2a370 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
2a380 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
2a390 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
2a3a0 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
2a3b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2a3c0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
2a3d0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
2a3e0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
2a3f0 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
2a400 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
2a410 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
2a420 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
2a430 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2a440 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
2a450 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
2a460 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
2a470 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
2a480 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
2a490 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
2a4a0 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
2a4b0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
2a4c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2a4d0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2a4e0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
2a4f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
2a500 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
2a510 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
2a520 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
2a530 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
2a540 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
2a550 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
2a560 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
2a570 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
2a580 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2a590 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2a5a0 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
2a5b0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
2a5c0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
2a5d0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
2a5e0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
2a5f0 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
2a600 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
2a610 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a620 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2a630 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2a640 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2a650 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2a660 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2a670 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2a680 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2a690 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2a6a0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2a6b0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2a6c0 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2a6d0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2a6e0 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  >p1];.  for(j=0;
2a6f0 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
2a700 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28      aRoot[j] = (
2a710 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49  int)sqlite3VdbeI
2a720 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d  ntValue(&pIn1[j]
2a730 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  );.  }.  aRoot[j
2a740 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  ] = 0;.  assert(
2a750 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
2a760 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2a770 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2a780 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
2a790 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2a7a0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
2a7b0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
2a7c0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
2a7d0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
2a800 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
2a810 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2a820 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
2a830 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2a840 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
2a850 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2a860 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
2a870 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2a880 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
2a890 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
2a8a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2a8b0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
2a8c0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2a8d0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2a8e0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2a8f0 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2a900 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2a910 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2a920 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2a930 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2a940 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2a950 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2a960 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2a970 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2a980 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2a990 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2a9a0 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
2a9b0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
2a9c0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
2a9d0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
2a9e0 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
2a9f0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
2aa00 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
2aa10 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2aa20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2aa30 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
2aa40 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2aa50 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
2aa60 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
2aa70 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2aa80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2aa90 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
2aaa0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2aab0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
2aac0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2aad0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
2aae0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2aaf0 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2ab00 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2ab10 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2ab20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2ab30 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2ab40 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2ab50 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
2ab60 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2ab70 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2ab80 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
2ab90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2aba0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
2abb0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2abc0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
2abd0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
2abe0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
2abf0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
2ac00 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
2ac10 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
2ac20 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2ac30 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
2ac40 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2ac50 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
2ac60 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
2ac70 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
2ac80 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2ac90 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
2aca0 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
2acb0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2acc0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
2acd0 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
2ace0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2acf0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2ad00 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2ad10 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
2ad20 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
2ad30 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
2ad40 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
2ad50 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
2ad60 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
2ad70 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2ad80 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2ad90 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
2ada0 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65  p2 - 1;.    Vdbe
2adb0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
2adc0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
2add0 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
2ade0 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
2adf0 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  dex */.    sqlit
2ae00 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2ae10 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2ae20 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65  , val);.    Vdbe
2ae30 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
2ae40 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
2ae50 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2ae60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ae70 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
2ae80 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
2ae90 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
2aea0 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
2aeb0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2aec0 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
2aed0 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
2aee0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
2aef0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
2af00 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
2af10 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
2af20 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
2af30 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
2af40 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
2af50 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
2af60 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
2af70 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
2af80 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
2af90 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
2afa0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
2afb0 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
2afc0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
2afd0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
2afe0 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
2aff0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
2b000 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
2b010 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
2b020 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
2b030 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
2b040 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
2b050 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
2b060 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
2b070 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
2b080 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
2b090 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
2b0a0 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
2b0b0 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
2b0c0 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
2b0d0 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
2b0e0 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
2b0f0 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
2b100 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
2b110 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
2b120 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
2b130 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
2b140 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
2b150 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
2b160 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
2b170 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
2b180 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
2b190 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
2b1a0 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
2b1b0 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
2b1c0 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
2b1d0 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
2b1e0 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
2b1f0 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
2b200 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
2b210 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
2b220 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
2b230 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
2b240 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
2b250 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
2b260 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
2b270 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
2b280 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
2b290 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
2b2a0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
2b2b0 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
2b2c0 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
2b2d0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2b2e0 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
2b2f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2b300 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b320 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
2b330 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
2b340 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
2b350 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2b360 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
2b370 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2b380 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
2b390 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
2b3a0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
2b3b0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
2b3c0 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
2b3d0 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
2b3e0 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
2b3f0 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
2b400 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
2b410 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
2b420 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
2b430 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
2b440 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2b450 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2b460 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2b470 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2b480 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2b490 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b4a0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2b4b0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2b4c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b4d0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2b4e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
2b4f0 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
2b500 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
2b510 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
2b520 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
2b530 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2b540 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75  t, iSet, pIn3->u
2b550 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  .i);.    VdbeBra
2b560 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21  nchTaken(exists!
2b570 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65  =0,2);.    if( e
2b580 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70  xists ){.      p
2b590 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2b5a0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2b5b0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53    }.  }.  if( iS
2b5c0 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
2b5d0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2b5e0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2b5f0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2b600 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
2b610 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b620 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
2b630 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
2b640 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2b650 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2b660 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2b670 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
2b680 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
2b690 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
2b6a0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2b6b0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
2b6c0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
2b6d0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
2b6e0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
2b6f0 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
2b700 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
2b710 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
2b720 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
2b730 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2b740 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2b750 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
2b760 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
2b770 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
2b780 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
2b790 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
2b7a0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2b7b0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
2b7c0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
2b7d0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
2b7e0 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
2b7f0 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
2b800 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
2b810 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
2b820 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
2b830 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
2b840 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2b850 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
2b860 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
2b870 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
2b880 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
2b890 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2b8a0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
2b8b0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
2b8c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
2b8d0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
2b8e0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
2b8f0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2b900 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
2b910 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
2b920 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2b930 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b950 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
2b960 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
2b970 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2b980 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
2b990 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b9a0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
2b9b0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
2b9c0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
2b9d0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2b9e0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
2b9f0 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
2ba00 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
2ba10 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
2ba20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
2ba30 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
2ba40 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
2ba50 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
2ba60 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
2ba70 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
2ba80 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
2ba90 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
2baa0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
2bab0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
2bac0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
2bad0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
2bae0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
2baf0 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
2bb00 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
2bb10 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
2bb20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2bb30 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2bb40 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
2bb50 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
2bb60 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
2bb70 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
2bb80 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2bb90 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
2bba0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
2bbb0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
2bbc0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
2bbd0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
2bbe0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
2bbf0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
2bc00 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
2bc10 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
2bc20 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
2bc30 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
2bc40 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
2bc50 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
2bc60 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
2bc70 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
2bc80 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2bc90 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
2bca0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
2bcb0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
2bcc0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
2bcd0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
2bce0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
2bcf0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
2bd00 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
2bd10 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2bd20 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2bd30 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2bd40 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2bd50 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2bd60 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2bd70 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2bd80 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2bd90 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2bda0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2bdb0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2bdc0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2bdd0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2bde0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2bdf0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2be00 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2be10 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2be20 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2be30 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2be40 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2be50 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2be60 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2be70 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2be80 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2be90 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2bea0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2beb0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2bec0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2bed0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2bee0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2bef0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
2bf00 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
2bf10 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2bf20 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2bf30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2bf40 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2bf50 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2bf60 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2bf70 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2bf80 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2bf90 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2bfa0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2bfb0 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2bfc0 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2bfd0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2bfe0 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2bff0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2c000 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2c010 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2c020 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2c030 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2c040 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2c050 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2c060 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2c070 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2c080 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2c090 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2c0a0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2c0b0 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2c0c0 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2c0d0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2c0e0 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2c0f0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2c100 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2c110 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2c120 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2c130 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2c140 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2c150 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2c160 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2c170 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2c180 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2c190 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2c1a0 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2c1b0 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2c1c0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2c1d0 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2c1e0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2c200 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2c210 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2c220 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2c230 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2c240 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2c250 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2c260 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2c270 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2c280 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2c290 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2c2a0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2c2b0 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2c2c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2c2d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c2e0 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2c2f0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2c300 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2c310 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2c320 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2c330 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2c340 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2c350 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2c360 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2c370 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2c380 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2c390 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2c3a0 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2c3b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2c3c0 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2c3d0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2c3e0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2c3f0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2c400 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2c410 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2c420 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2c430 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2c440 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2c450 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2c460 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2c470 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2c480 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2c490 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2c4a0 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2c4b0 67 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  g;.#ifdef SQLITE
2c4c0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
2c4d0 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
2c4e0 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
2c4f0 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a  anExec;.#endif..
2c500 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
2c510 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2c520 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
2c530 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
2c540 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
2c550 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
2c560 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
2c570 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
2c580 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
2c590 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
2c5a0 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
2c5b0 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
2c5c0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
2c5d0 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2c5e0 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
2c5f0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2c600 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a  e->nChildMem );.
2c610 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2c620 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2c630 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
2c640 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d  .    assert( pc=
2c650 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
2c660 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
2c670 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
2c680 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
2c690 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
2c6a0 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
2c6b0 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  d;.  pFrame->nCh
2c6c0 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
2c6d0 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62  e;.  pFrame->nDb
2c6e0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e  Change = p->db->
2c6f0 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43  nChange;.  p->nC
2c700 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
2c710 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2c720 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
2c730 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
2c740 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
2c750 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
2c760 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
2c770 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
2c780 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
2c790 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
2c7a0 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
2c7b0 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31  )&aMem[p->nMem+1
2c7c0 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  ];.  p->aOp = aO
2c7d0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
2c7e0 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
2c7f0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70  rogram->nOp;.  p
2c800 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75  ->aOnceFlag = (u
2c810 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d  8 *)&p->apCsr[p-
2c820 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e  >nCursor];.  p->
2c830 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f  nOnceFlag = pPro
2c840 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66  gram->nOnce;.#if
2c850 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2c860 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
2c870 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20  S.  p->anExec = 
2c880 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 63 20 3d  0;.#endif.  pc =
2c890 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d   -1;.  memset(p-
2c8a0 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70  >aOnceFlag, 0, p
2c8b0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20  ->nOnceFlag);.. 
2c8c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c8d0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
2c8e0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
2c8f0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
2c900 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
2c910 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
2c920 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
2c930 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
2c940 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
2c950 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
2c960 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
2c970 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
2c980 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
2c990 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
2c9a0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
2c9b0 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
2c9c0 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
2c9d0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2c9e0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
2c9f0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
2ca00 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
2ca10 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
2ca20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
2ca30 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
2ca40 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
2ca50 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
2ca60 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
2ca70 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2ca80 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
2ca90 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
2caa0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
2cab0 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
2cac0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2cad0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
2cae0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
2caf0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2cb00 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
2cb10 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
2cb20 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
2cb30 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
2cb40 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2cb50 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
2cb60 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
2cb70 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
2cb80 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
2cb90 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
2cba0 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
2cbb0 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
2cbc0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
2cbd0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
2cbe0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2cbf0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2cc00 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
2cc10 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
2cc20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2cc30 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a  fkctr[P1]+=P2.**
2cc40 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20  .** Increment a 
2cc50 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e  "constraint coun
2cc60 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d  ter" by P2 (P2 m
2cc70 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f  ay be negative o
2cc80 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20  r positive)..** 
2cc90 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2cca0 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  o, the database 
2ccb0 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
2ccc0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
2ccd0 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20  d .** (deferred 
2cce0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2ccf0 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77  traints). Otherw
2cd00 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65  ise, if P1 is ze
2cd10 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74  ro, the .** stat
2cd20 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  ement counter is
2cd30 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d   incremented (im
2cd40 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
2cd50 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
2cd60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43  ..*/.case OP_FkC
2cd70 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20  ounter: {.  if( 
2cd80 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2cd90 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20  TE_DeferFKs ){. 
2cda0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
2cdb0 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  ImmCons += pOp->
2cdc0 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  p2;.  }else if( 
2cdd0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64  pOp->p1 ){.    d
2cde0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2cdf0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2ce00 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b  else{.    p->nFk
2ce10 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f  Constraint += pO
2ce20 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  p->p2;.  }.  bre
2ce30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ce40 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32  : FkIfZero P1 P2
2ce50 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2ce60 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d  is: if fkctr[P1]
2ce70 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
2ce80 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
2ce90 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
2cea0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
2ceb0 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
2cec0 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
2ced0 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
2cee0 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
2cef0 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
2cf00 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2cf10 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
2cf20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
2cf30 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2cf40 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2cf50 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
2cf60 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
2cf70 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
2cf80 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
2cf90 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
2cfa0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2cfb0 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
2cfc0 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
2cfd0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
2cfe0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
2cff0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2d000 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
2d010 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
2d020 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2d030 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
2d040 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
2d050 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2d060 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
2d070 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
2d080 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65  hTaken(db->nDefe
2d090 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
2d0a0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2d0b0 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  ons==0, 2);.    
2d0c0 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
2d0d0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
2d0e0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2d0f0 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2d100 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2d110 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2d120 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
2d130 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
2d140 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2d150 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
2d160 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
2d170 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2d180 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2d190 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2d1a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2d1b0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
2d1c0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2d1d0 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66  EIGN_KEY */..#if
2d1e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d1f0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
2d200 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
2d210 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d220 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
2d230 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29  max(r[P1],r[P2])
2d240 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72  .**.** P1 is a r
2d250 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
2d260 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
2d270 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66  s VM (the root f
2d280 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65  rame is.** diffe
2d290 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75  rent from the cu
2d2a0 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74  rrent frame if t
2d2b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2d2c0 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65  is being execute
2d2d0 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75  d.** within a su
2d2e0 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20  b-program). Set 
2d2f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2d300 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
2d310 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69  maximum of .** i
2d320 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  ts current value
2d330 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
2d340 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2d350 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
2d360 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
2d370 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
2d380 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
2d390 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
2d3a0 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2d3b0 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
2d3c0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
2d3d0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2d3e0 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72  me;.  if( p->pFr
2d3f0 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70  ame ){.    for(p
2d400 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2d410 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2d420 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2d430 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70  >pParent);.    p
2d440 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  In1 = &pFrame->a
2d450 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2d460 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20  }else{.    pIn1 
2d470 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2d480 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
2d490 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
2d4a0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2d4b0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2d4c0 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
2d4d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2d4e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2d4f0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
2d500 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2d510 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20  <pIn2->u.i){.   
2d520 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e   pIn1->u.i = pIn
2d530 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72  2->u.i;.  }.  br
2d540 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2d550 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
2d560 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f  OINCREMENT */../
2d570 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20  * Opcode: IfPos 
2d580 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2d590 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
2d5a0 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ]>0 goto P2.**.*
2d5b0 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
2d5c0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2d5d0 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65  teger..** If the
2d5e0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2d5f0 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
2d600 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50  eater, jump to P
2d610 32 20 61 6e 64 0a 2a 2a 20 61 64 64 20 74 68 65  2 and.** add the
2d620 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 50   literal value P
2d630 33 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 31  3 to register P1
2d640 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69  ..**.** If the i
2d650 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
2d660 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c  register P1 is l
2d670 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e  ess than 1, then
2d680 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
2d690 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63   unchanged and c
2d6a0 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68  ontrol passes th
2d6b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2d6c0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2d6d0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a  /.case OP_IfPos:
2d6e0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2d6f0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2d700 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2d710 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2d720 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2d730 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
2d740 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69  Taken( pIn1->u.i
2d750 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  >0, 2);.  if( pI
2d760 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
2d770 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2d780 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2d790 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2d7a0 66 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a 20  fNeg P1 P2 P3 * 
2d7b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2d7c0 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50  [P1]+=P3, if r[P
2d7d0 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]<0 goto P2.**.
2d7e0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2d7f0 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2d800 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74  nteger.  Add lit
2d810 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76  eral P3 to the v
2d820 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  alue in.** regis
2d830 74 65 72 20 50 31 20 74 68 65 6e 20 69 66 20 74  ter P1 then if t
2d840 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2d850 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2d860 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
2d870 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20  to P2. .*/.case 
2d880 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
2d890 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2d8a0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2d8b0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2d8c0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2d8d0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
2d8e0 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
2d8f0 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  >p3;.  VdbeBranc
2d900 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2d910 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
2d920 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
2d930 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2d940 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2d950 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2d960 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 50  fNotZero P1 P2 P
2d970 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2d980 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74  s: if r[P1]!=0 t
2d990 68 65 6e 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 67  hen r[P1]+=P3, g
2d9a0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
2d9b0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
2d9c0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2d9d0 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  .  If the conten
2d9e0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
2d9f0 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79   is.** initially
2da00 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 61   nonzero, then a
2da10 64 64 20 50 33 20 74 6f 20 50 31 20 61 6e 64 20  dd P3 to P1 and 
2da20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20  jump to P2.  If 
2da30 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a  register P1 is.*
2da40 2a 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f  * initially zero
2da50 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61  , leave it uncha
2da60 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  nged and fall th
2da70 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rough..*/.case O
2da80 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20  P_IfNotZero: {  
2da90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2daa0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2dab0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2dac0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2dad0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2dae0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2daf0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32  n(pIn1->u.i<0, 2
2db00 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2db10 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d  .i ){.     pIn1-
2db20 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b  >u.i += pOp->p3;
2db30 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2db40 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2db50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2db60 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20  e: DecrJumpZero 
2db70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2db80 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72  ynopsis: if (--r
2db90 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32  [P1])==0 goto P2
2dba0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2dbb0 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20  P1 must hold an 
2dbc0 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d  integer.  Decrem
2dbd0 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
2dbe0 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
2dbf0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20  then jump to P2 
2dc00 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
2dc10 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
2dc20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
2dc30 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
2dc40 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2dc50 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2dc60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2dc70 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2dc80 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
2dc90 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62  n1->u.i--;.  Vdb
2dca0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
2dcb0 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
2dcc0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
2dcd0 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2dce0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2dcf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
2dd00 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f  Opcode: JumpZero
2dd10 49 6e 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  Incr P1 P2 * * *
2dd20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2dd30 20 28 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20   (r[P1]++)==0 ) 
2dd40 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
2dd50 65 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75  e register P1 mu
2dd60 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2dd70 74 65 67 65 72 2e 20 20 49 66 20 72 65 67 69 73  teger.  If regis
2dd80 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61  ter P1 is initia
2dd90 6c 6c 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65  lly.** zero, the
2dda0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  n jump to P2.  I
2ddb0 6e 63 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65  ncrement registe
2ddc0 72 20 50 31 20 72 65 67 61 72 64 6c 65 73 73 20  r P1 regardless 
2ddd0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a  of whether or.**
2dde0 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
2ddf0 20 74 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20   taken..*/.case 
2de00 4f 50 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a  OP_JumpZeroIncr:
2de10 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2de20 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2de30 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2de40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2de50 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2de60 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
2de70 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
2de80 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
2de90 49 6e 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29  In1->u.i++)==0 )
2dea0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
2deb0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2dec0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ded0 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
2dee0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2def0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
2df00 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
2df10 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
2df20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2df30 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
2df40 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
2df50 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
2df60 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
2df70 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2df80 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
2df90 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
2dfa0 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
2dfb0 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a  .  Use register.
2dfc0 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63  ** P3 as the acc
2dfd0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
2dfe0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
2dff0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
2e000 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
2e010 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
2e020 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  s..*/.case OP_Ag
2e030 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e  gStep: {.  int n
2e040 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
2e050 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70   *pMem;.  Mem *p
2e060 52 65 63 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20  Rec;.  Mem t;.  
2e070 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2e080 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
2e090 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
2e0a0 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
2e0b0 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
2e0c0 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70    pRec = &aMem[p
2e0d0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
2e0e0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
2e0f0 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
2e100 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
2e110 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
2e120 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
2e130 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65  ( memIsValid(pRe
2e140 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b  c) );.    apVal[
2e150 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d  i] = pRec;.    m
2e160 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2e170 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20  p, pRec);.  }.  
2e180 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
2e190 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73  >p4.pFunc;.  ass
2e1a0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2e1b0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2e1c0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
2e1d0 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20  );.  ctx.pMem = 
2e1e0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2e1f0 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
2e200 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ++;.  sqlite3Vdb
2e210 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c  eMemInit(&t, db,
2e220 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74   MEM_Null);.  ct
2e230 78 2e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63  x.pOut = &t;.  c
2e240 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2e250 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
2e260 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b  .  ctx.iOp = pc;
2e270 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  .  ctx.skipFlag 
2e280 3d 20 30 3b 0a 20 20 28 63 74 78 2e 70 46 75 6e  = 0;.  (ctx.pFun
2e290 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20  c->xStep)(&ctx, 
2e2a0 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
2e2b0 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
2e2c0 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
2e2d0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
2e2e0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2e2f0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2e300 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2e310 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20  ue_text(&t));.  
2e320 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72    rc = ctx.isErr
2e330 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74  or;.  }.  if( ct
2e340 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  x.skipFlag ){.  
2e350 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2e360 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2e370 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20  lSeq );.    i = 
2e380 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20  pOp[-1].p1;.    
2e390 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
2e3a0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2e3b0 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d  aMem[i], 1);.  }
2e3c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2e3d0 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20  mRelease(&t);.  
2e3e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e3f0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
2e400 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
2e410 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
2e420 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
2e430 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
2e440 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
2e450 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
2e460 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
2e470 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
2e480 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
2e490 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
2e4a0 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
2e4b0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
2e4c0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
2e4d0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
2e4e0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
2e4f0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2e500 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
2e510 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
2e520 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
2e530 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
2e540 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
2e550 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
2e560 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
2e570 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
2e580 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
2e590 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
2e5a0 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
2e5b0 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
2e5c0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
2e5d0 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
2e5e0 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
2e5f0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
2e600 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
2e610 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
2e620 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
2e630 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
2e640 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
2e650 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
2e660 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
2e670 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65  Cursor) );.  pMe
2e680 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2e690 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
2e6a0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
2e6b0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
2e6c0 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
2e6d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
2e6e0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
2e6f0 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
2e700 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
2e710 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2e720 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2e730 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
2e740 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
2e750 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
2e760 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2e770 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
2e780 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2e790 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
2e7a0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
2e7b0 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
2e7c0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
2e7d0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
2e7e0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
2e7f0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70  E_OMIT_WAL./* Op
2e800 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74  code: Checkpoint
2e810 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2e820 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64  .** Checkpoint d
2e830 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73  atabase P1. This
2e840 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50   is a no-op if P
2e850 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  1 is not current
2e860 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64  ly in.** WAL mod
2e870 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20  e. Parameter P2 
2e880 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  is one of SQLITE
2e890 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
2e8a0 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45  IVE, FULL,.** RE
2e8b0 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41  START, or TRUNCA
2e8c0 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20  TE.  Write 1 or 
2e8d0 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69  0 into mem[P3] i
2e8e0 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  f the checkpoint
2e8f0 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49   returns.** SQLI
2e900 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20  TE_BUSY or not, 
2e910 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57  respectively.  W
2e920 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  rite the number 
2e930 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a  of pages in the.
2e940 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65  ** WAL after the
2e950 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f   checkpoint into
2e960 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74   mem[P3+1] and t
2e970 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2e980 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c  es.** in the WAL
2e990 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
2e9a0 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74  checkpointed aft
2e9b0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2e9c0 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69  t.** completes i
2e9d0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20  nto mem[P3+2].  
2e9e0 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72  However on an er
2e9f0 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  ror, mem[P3+1] a
2ea00 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20  nd.** mem[P3+2] 
2ea10 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
2ea20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  to -1..*/.case O
2ea30 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
2ea40 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea60 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
2ea70 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b  r */.  int aRes[
2ea80 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  3];             
2ea90 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
2eaa0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
2eab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2eac0 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
2ead0 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a  results here */.
2eae0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2eaf0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2eb00 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
2eb10 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
2eb20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
2eb30 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2eb40 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
2eb50 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
2eb60 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2eb70 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
2eb80 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2eb90 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2eba0 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20 20  T_RESTART.      
2ebb0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
2ebc0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54  ITE_CHECKPOINT_T
2ebd0 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72  RUNCATE.  );.  r
2ebe0 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
2ebf0 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
2ec00 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
2ec10 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
2ec20 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2ec30 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63  E_BUSY ){.    rc
2ec40 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2ec50 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20    aRes[0] = 1;. 
2ec60 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d   }.  for(i=0, pM
2ec70 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2ec80 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70  p3]; i<3; i++, p
2ec90 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  Mem++){.    sqli
2eca0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
2ecb0 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52  64(pMem, (i64)aR
2ecc0 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a  es[i]);.  }    .
2ecd0 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65    break;.};  .#e
2ece0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2ecf0 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2ed00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72  ./* Opcode: Jour
2ed10 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33  nalMode P1 P2 P3
2ed20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67   * *.**.** Chang
2ed30 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e the journal mo
2ed40 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  de of database P
2ed50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74  1 to P3. P3 must
2ed60 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a   be one of the.*
2ed70 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  * PAGER_JOURNALM
2ed80 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20  ODE_XXX values. 
2ed90 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77  If changing betw
2eda0 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20  een the various 
2edb0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65  rollback.** mode
2edc0 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63  s (delete, trunc
2edd0 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66  ate, persist, of
2ede0 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74  f and memory), t
2edf0 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a  his is a simple.
2ee00 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f  ** operation. No
2ee10 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e   IO is required.
2ee20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69  .**.** If changi
2ee30 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f  ng into or out o
2ee40 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70  f WAL mode the p
2ee50 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65  rocedure is more
2ee60 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a   complicated..**
2ee70 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69  .** Write a stri
2ee80 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
2ee90 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d  e final journal-
2eea0 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72  mode to register
2eeb0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
2eec0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20  JournalMode: {  
2eed0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
2eee0 65 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20  ease */.  Btree 
2eef0 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pBt;           
2ef00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72            /* Btr
2ef10 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75  ee to change jou
2ef20 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a  rnal mode of */.
2ef30 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
2ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef50 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63    /* Pager assoc
2ef60 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a  iated with pBt *
2ef70 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20  /.  int eNew;   
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef90 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e      /* New journ
2efa0 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  al mode */.  int
2efb0 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20   eOld;          
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2efd0 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20  The old journal 
2efe0 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  mode */.#ifndef 
2eff0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2f000 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
2f010 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  ilename;        
2f020 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
2f030 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70  abase file for p
2f040 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  Pager */.#endif.
2f050 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70  .  eNew = pOp->p
2f060 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65  3;.  assert( eNe
2f070 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f080 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20  MODE_DELETE .   
2f090 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2f0a0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
2f0b0 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20  RUNCATE .       
2f0c0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f0d0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
2f0e0 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ST .       || eN
2f0f0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f100 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20  LMODE_OFF.      
2f110 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2f120 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2f130 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  RY.       || eNe
2f140 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f150 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20  MODE_WAL.       
2f160 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f170 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2f180 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
2f190 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2f1a0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2f1b0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2f1c0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
2f1d0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
2f1e0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50  p->p1].pBt;.  pP
2f1f0 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
2f200 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20  reePager(pBt);. 
2f210 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50   eOld = sqlite3P
2f220 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerGetJournalMo
2f230 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66  de(pPager);.  if
2f240 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2f250 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
2f260 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
2f270 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67   if( !sqlite3Pag
2f280 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72  erOkToChangeJour
2f290 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20  nalMode(pPager) 
2f2a0 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a  ) eNew = eOld;..
2f2b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f2c0 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e  MIT_WAL.  zFilen
2f2d0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ame = sqlite3Pag
2f2e0 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65  erFilename(pPage
2f2f0 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20  r, 1);..  /* Do 
2f300 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e  not allow a tran
2f310 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61  sition to journa
2f320 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61  l_mode=WAL for a
2f330 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
2f340 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72  n temporary stor
2f350 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46  age or if the VF
2f360 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  S does not suppo
2f370 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  rt shared memory
2f380 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65   .  */.  if( eNe
2f390 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f3a0 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28  MODE_WAL.   && (
2f3b0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2f3c0 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20  zFilename)==0   
2f3d0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20          /* Temp 
2f3e0 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c  file */.       |
2f3f0 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57  | !sqlite3PagerW
2f400 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67  alSupported(pPag
2f410 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61  er))   /* No sha
2f420 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f  red-memory suppo
2f430 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65  rt */.  ){.    e
2f440 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2f450 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f  .  if( (eNew!=eO
2f460 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d  ld).   && (eOld=
2f470 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f480 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d  DE_WAL || eNew==
2f490 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f4a0 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20  E_WAL).  ){.    
2f4b0 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
2f4c0 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65  mit || db->nVdbe
2f4d0 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20  Read>1 ){.      
2f4e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2f4f0 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
2f500 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2f510 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
2f520 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
2f530 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
2f540 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
2f550 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
2f560 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
2f570 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f580 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
2f590 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
2f5a0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2f5b0 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
2f5c0 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
2f5d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2f5e0 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
2f5f0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
2f600 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
2f610 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
2f620 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
2f630 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
2f640 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
2f650 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
2f660 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
2f670 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
2f680 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
2f690 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
2f6a0 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
2f6b0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
2f6c0 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
2f6d0 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
2f6e0 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
2f6f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
2f700 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
2f710 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
2f720 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
2f730 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2f740 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
2f750 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2f760 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2f770 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
2f780 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
2f790 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2f7a0 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
2f7b0 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
2f7c0 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
2f7d0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
2f7e0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
2f7f0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
2f800 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
2f810 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
2f820 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
2f830 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2f840 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
2f850 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
2f860 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
2f870 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
2f880 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
2f890 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
2f8a0 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
2f8b0 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
2f8c0 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
2f8d0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
2f8e0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
2f8f0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
2f900 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
2f910 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
2f920 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
2f930 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2f940 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
2f950 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2f960 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
2f970 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
2f980 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
2f990 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
2f9a0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2f9b0 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
2f9c0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
2f9d0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65   if( rc ){.    e
2f9e0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
2f9f0 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
2fa00 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2fa10 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2fa20 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  );..  pOut = &aM
2fa30 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
2fa40 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2fa50 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
2fa60 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
2fa70 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
2fa80 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2fa90 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
2faa0 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
2fab0 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
2fac0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
2fad0 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
2fae0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2faf0 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
2fb00 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2fb10 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
2fb20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
2fb30 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
2fb40 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2fb50 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
2fb60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2fb70 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
2fb80 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
2fb90 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
2fba0 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
2fbb0 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
2fbc0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
2fbd0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
2fbe0 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
2fbf0 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
2fc00 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
2fc10 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2fc20 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
2fc30 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
2fc40 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74  cuum: {.  assert
2fc50 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2fc60 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2fc70 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
2fc80 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
2fc90 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2fca0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2fcb0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
2fcc0 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
2fcd0 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
2fce0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
2fcf0 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
2fd00 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
2fd10 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
2fd20 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
2fd30 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
2fd40 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
2fd50 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
2fd60 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
2fd70 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
2fd80 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2fd90 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2fda0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2fdb0 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
2fdc0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2fdd0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
2fde0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2fdf0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2fe00 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2fe10 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2fe20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2fe30 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2fe40 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2fe50 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
2fe60 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2fe70 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
2fe80 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
2fe90 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
2fea0 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
2feb0 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
2fec0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2fed0 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d  DONE ){.    pc =
2fee0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2fef0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2ff00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2ff10 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
2ff20 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
2ff30 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
2ff40 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
2ff50 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
2ff60 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
2ff70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2ff80 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
2ff90 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
2ffa0 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
2ffb0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
2ffc0 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
2ffd0 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
2ffe0 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
2fff0 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
30000 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
30010 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
30020 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
30030 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
30040 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
30050 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
30060 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
30070 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
30080 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
30090 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
300a0 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
300b0 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
300c0 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
300d0 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
300e0 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
300f0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
30100 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
30110 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
30120 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
30130 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
30140 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
30150 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
30160 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
30170 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
30180 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
30190 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
301a0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
301b0 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
301c0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
301d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
301e0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
301f0 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
30200 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
30210 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
30220 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
30230 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
30240 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
30250 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
30260 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
30270 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
30280 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
30290 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
302a0 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
302b0 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
302c0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
302d0 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
302e0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
302f0 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
30300 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
30310 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
30320 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
30330 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
30340 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
30350 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
30360 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
30370 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
30380 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
30390 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
303a0 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
303b0 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
303c0 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
303d0 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
303e0 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
303f0 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
30400 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
30410 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
30420 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
30430 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
30440 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
30450 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
30460 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
30470 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
30480 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
30490 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
304a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
304b0 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
304c0 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
304d0 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
304e0 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
304f0 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
30500 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
30510 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
30520 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4.z;.      sqlit
30530 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
30540 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61  zErrMsg, db, "da
30550 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
30560 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
30570 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
30580 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30590 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
305a0 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
305b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
305c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
305d0 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
305e0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
305f0 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
30600 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
30610 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
30620 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
30630 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
30640 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
30650 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
30660 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
30670 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
30680 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
30690 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
306a0 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
306b0 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
306c0 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
306d0 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
306e0 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
306f0 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
30700 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
30710 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
30720 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
30730 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
30740 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
30750 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
30760 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
30770 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
30780 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
30790 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
307a0 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
307b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
307c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
307d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
307e0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
307f0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
30800 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
30810 43 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34  Create P1 * * P4
30820 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
30830 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
30840 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
30850 74 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20  tabase P1. Call 
30860 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
30870 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74  od.** for that t
30880 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
30890 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63  _VCreate: {.  rc
308a0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
308b0 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
308c0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  ->p1, pOp->p4.z,
308d0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
308e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
308f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30900 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
30910 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30920 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30930 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
30940 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
30950 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
30960 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
30970 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
30980 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
30990 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
309a0 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
309b0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
309c0 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70  _VDestroy: {.  p
309d0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
309e0 20 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   2;.  rc = sqlit
309f0 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
30a00 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  y(db, pOp->p1, p
30a10 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e  Op->p4.z);.  p->
30a20 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
30a30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
30a40 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30a50 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30a60 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
30a70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30a80 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
30a90 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
30aa0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
30ab0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
30ac0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
30ad0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
30ae0 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
30af0 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
30b00 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
30b10 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
30b20 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
30b30 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
30b40 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
30b50 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
30b60 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
30b70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
30b80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
30b90 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
30ba0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
30bb0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
30bc0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
30bd0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
30be0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
30bf0 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  );.  pCur = 0;. 
30c00 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30   pVtabCursor = 0
30c10 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
30c20 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
30c30 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73  ;.  pModule = (s
30c40 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
30c50 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
30c60 20 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26    assert(pVtab &
30c70 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63  & pModule);.  rc
30c80 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
30c90 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43  n(pVtab, &pVtabC
30ca0 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65  ursor);.  sqlite
30cb0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
30cc0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
30cd0 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63  f( SQLITE_OK==rc
30ce0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
30cf0 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
30d00 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
30d10 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61  lass */.    pVta
30d20 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d  bCursor->pVtab =
30d30 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20   pVtab;..    /* 
30d40 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
30d50 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
30d60 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  .    pCur = allo
30d70 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
30d80 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29  p->p1, 0, -1, 0)
30d90 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
30da0 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
30db0 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
30dc0 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c  bCursor;.    }el
30dd0 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61  se{.      db->ma
30de0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
30df0 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78        pModule->x
30e00 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f  Close(pVtabCurso
30e10 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
30e20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30e30 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30e40 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30e50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30e60 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30e70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
30e80 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
30e90 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
30ea0 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
30eb0 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
30ec0 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
30ed0 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
30ee0 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
30ef0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
30f00 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
30f10 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
30f20 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
30f30 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
30f40 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
30f50 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
30f60 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
30f70 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
30f80 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
30f90 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
30fa0 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
30fb0 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
30fc0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
30fd0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
30fe0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
30ff0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
31000 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
31010 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
31020 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
31030 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
31040 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
31050 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
31060 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
31070 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
31080 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
31090 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
310a0 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
310b0 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
310c0 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
310d0 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
310e0 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
310f0 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
31100 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
31110 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
31120 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
31130 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
31140 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
31150 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
31160 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
31170 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
31180 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
31190 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
311a0 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
311b0 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
311c0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
311d0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
311e0 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
311f0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
31200 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
31210 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
31220 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
31230 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
31240 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
31250 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
31260 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
31270 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65   *pCur;.  int re
31280 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  s;.  int i;.  Me
31290 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51  m **apArg;..  pQ
312a0 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  uery = &aMem[pOp
312b0 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d  ->p3];.  pArgc =
312c0 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70   &pQuery[1];.  p
312d0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
312e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
312f0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51  t( memIsValid(pQ
31300 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53  uery) );.  REGIS
31310 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
31320 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73  3, pQuery);.  as
31330 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
31340 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74  bCursor );.  pVt
31350 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d  abCursor = pCur-
31360 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  >pVtabCursor;.  
31370 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72  pVtab = pVtabCur
31380 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
31390 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
313a0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
313b0 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
313c0 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
313d0 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
313e0 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
313f0 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
31400 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
31410 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
31420 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
31430 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
31440 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
31450 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
31460 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
31470 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65  od */.  {.    re
31480 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67  s = 0;.    apArg
31490 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
314a0 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
314b0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
314c0 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67  apArg[i] = &pArg
314d0 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20  c[i+1];.    }.. 
314e0 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
314f0 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  od = 1;.    rc =
31500 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
31510 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69  r(pVtabCursor, i
31520 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
31530 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
31540 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
31550 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  hod = 0;.    sql
31560 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
31570 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
31580 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
31590 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
315a0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
315b0 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
315c0 0a 20 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42  .    }.    VdbeB
315d0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
315e0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
315f0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
31600 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
31610 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e   }.  }.  pCur->n
31620 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62  ullRow = 0;..  b
31630 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
31640 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
31650 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
31660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31670 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31680 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75  /* Opcode: VColu
31690 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mn P1 P2 P3 * *.
316a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
316b0 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a  3]=vcolumn(P2).*
316c0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
316d0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
316e0 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
316f0 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
31700 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
31710 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
31720 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
31730 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
31740 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
31750 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
31760 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
31770 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
31780 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
31790 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
317a0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
317b0 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
317c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
317d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
317e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
317f0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31800 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
31810 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
31820 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
31830 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
31840 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
31850 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
31860 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
31870 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
31880 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
31890 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
318a0 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
318b0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
318c0 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
318d0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
318e0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
318f0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
31900 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
31910 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
31920 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
31930 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
31940 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
31950 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
31960 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
31970 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
31980 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
31990 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
319a0 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
319b0 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
319c0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
319d0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
319e0 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
319f0 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
31a00 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
31a10 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
31a20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
31a30 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c  eEncoding(pDest,
31a40 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
31a50 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
31a60 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
31a70 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
31a80 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
31a90 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
31aa0 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
31ab0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
31ac0 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
31ad0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
31ae0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31af0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
31b00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31b10 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31b20 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
31b30 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
31b40 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
31b50 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
31b60 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
31b70 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
31b80 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
31b90 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
31ba0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
31bb0 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
31bc0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
31bd0 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
31be0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
31bf0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
31c00 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
31c10 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
31c20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
31c30 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
31c40 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
31c50 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
31c60 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
31c70 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
31c80 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
31c90 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
31ca0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31cb0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
31cc0 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
31cd0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
31ce0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
31cf0 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
31d00 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
31d10 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
31d20 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
31d30 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
31d40 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
31d50 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
31d60 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
31d70 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
31d80 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
31d90 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
31da0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
31db0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
31dc0 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
31dd0 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
31de0 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
31df0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
31e00 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
31e10 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
31e20 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
31e30 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
31e40 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
31e50 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
31e60 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
31e70 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
31e80 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
31e90 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
31ea0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
31eb0 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61  .  */.  p->inVta
31ec0 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72  bMethod = 1;.  r
31ed0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
31ee0 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
31ef0 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  rsor);.  p->inVt
31f00 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
31f10 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31f20 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
31f30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
31f40 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
31f50 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
31f60 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
31f70 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65  sor);.  }.  Vdbe
31f80 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73  BranchTaken(!res
31f90 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20  ,2);.  if( !res 
31fa0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
31fb0 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70  re is data, jump
31fc0 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63   to P2 */.    pc
31fd0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
31fe0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
31ff0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
32000 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
32010 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
32020 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
32030 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32040 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
32050 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
32060 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
32070 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
32080 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
32090 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
320a0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
320b0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
320c0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
320d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
320e0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
320f0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
32100 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
32110 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
32120 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
32130 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
32140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
32150 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
32160 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
32170 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
32180 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
32190 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
321a0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
321b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
321c0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
321d0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
321e0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
321f0 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
32200 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
32210 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
32220 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
32230 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
32240 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
32250 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
32260 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
32270 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
32280 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
32290 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
322a0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
322b0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
322c0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
322d0 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
322e0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
322f0 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
32300 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
32310 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
32320 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56  K ){.    rc = pV
32330 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
32340 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
32350 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69  me->z);.    sqli
32360 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
32370 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
32380 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
32390 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
323a0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
323b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
323c0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
323d0 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
323e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
323f0 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72  Synopsis: data=r
32400 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34  [P3@P2].**.** P4
32410 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
32420 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
32430 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
32440 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
32450 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
32460 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
32470 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
32480 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
32490 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
324a0 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
324b0 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
324c0 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
324d0 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
324e0 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
324f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
32500 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
32510 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
32520 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
32530 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
32540 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
32550 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
32560 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
32570 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
32580 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
32590 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
325a0 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
325b0 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
325c0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
325d0 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
325e0 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
325f0 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
32600 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
32610 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
32620 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
32630 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
32640 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
32650 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
32660 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
32670 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
32680 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
32690 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
326a0 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
326b0 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
326c0 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
326d0 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
326e0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
326f0 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
32700 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
32710 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
32720 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
32730 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
32740 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
32750 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
32760 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
32770 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
32780 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
32790 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
327a0 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
327b0 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
327c0 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
327d0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
327e0 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
327f0 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
32800 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
32810 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
32820 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  inserted..**.** 
32830 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20  P5 is the error 
32840 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c  actions (OE_Repl
32850 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45  ace, OE_Fail, OE
32860 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f  _Ignore, etc) to
32870 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65  .** apply in the
32880 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74   case of a const
32890 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e  raint failure on
328a0 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70   an insert or up
328b0 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
328c0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
328d0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
328e0 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
328f0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
32900 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
32910 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
32920 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
32930 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
32940 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  X;..  assert( pO
32950 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20  p->p2==1        
32960 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46  || pOp->p5==OE_F
32970 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35  ail   || pOp->p5
32980 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20  ==OE_Rollback . 
32990 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
329a0 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f  ==OE_Abort || pO
329b0 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
329c0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
329d0 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61  Replace.  );.  a
329e0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
329f0 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62  ly==0 );.  pVtab
32a00 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
32a10 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
32a20 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
32a30 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
32a40 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
32a50 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
32a60 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
32a70 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  P4_VTAB );.  if(
32a80 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d   ALWAYS(pModule-
32a90 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20  >xUpdate) ){.   
32aa0 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
32ab0 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43  ct = db->vtabOnC
32ac0 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41  onflict;.    apA
32ad0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
32ae0 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f     pX = &aMem[pO
32af0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
32b00 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
32b10 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
32b20 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20   memIsValid(pX) 
32b30 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
32b40 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29  tToChange(p, pX)
32b50 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
32b60 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
32b70 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  +;.    }.    db-
32b80 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
32b90 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72  = pOp->p5;.    r
32ba0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
32bb0 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
32bc0 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
32bd0 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e  ;.    db->vtabOn
32be0 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f  Conflict = vtabO
32bf0 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73  nConflict;.    s
32c00 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
32c10 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
32c20 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
32c30 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
32c40 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
32c50 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
32c60 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
32c70 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
32c80 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
32c90 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
32ca0 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b  stRowid = rowid;
32cb0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
32cc0 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
32cd0 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70  _CONSTRAINT && p
32ce0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43  Op->p4.pVtab->bC
32cf0 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20  onstraint ){.   
32d00 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d     if( pOp->p5==
32d10 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
32d20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
32d30 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  _OK;.      }else
32d40 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72  {.        p->err
32d50 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70  orAction = ((pOp
32d60 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
32d70 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70  ) ? OE_Abort : p
32d80 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d  Op->p5);.      }
32d90 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
32da0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
32db0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
32dc0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
32dd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
32de0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
32df0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
32e00 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
32e10 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
32e20 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
32e30 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
32e40 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
32e50 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
32e60 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
32e70 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
32e80 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
32e90 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
32ea0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
32eb0 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
32ec0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
32ed0 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f  tPage(db->aDb[pO
32ee0 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62  p->p1].pBt);.  b
32ef0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
32f00 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
32f10 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
32f20 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  MAS./* Opcode: M
32f30 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33  axPgcnt P1 P2 P3
32f40 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74   * *.**.** Try t
32f50 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75  o set the maximu
32f60 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72  m page count for
32f70 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
32f80 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e  the value in P3.
32f90 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74  .** Do not let t
32fa0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
32fb0 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77  count fall below
32fc0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67   the current pag
32fd0 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64  e count and.** d
32fe0 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
32ff0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
33000 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d  unt value if P3=
33010 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  =0..**.** Store 
33020 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
33030 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65   count after the
33040 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73   change in regis
33050 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
33060 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20  OP_MaxPgcnt: {  
33070 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
33080 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
33090 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
330a0 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a  ewMax;.  Btree *
330b0 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  pBt;..  pBt = db
330c0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
330d0 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30  Bt;.  newMax = 0
330e0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  ;.  if( pOp->p3 
330f0 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20  ){.    newMax = 
33100 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
33110 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69  Page(pBt);.    i
33120 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73  f( newMax < (uns
33130 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20  igned)pOp->p3 ) 
33140 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e  newMax = (unsign
33150 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a  ed)pOp->p3;.  }.
33160 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
33170 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67  lite3BtreeMaxPag
33180 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d  eCount(pBt, newM
33190 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ax);.  break;.}.
331a0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f  #endif.../* Opco
331b0 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20  de: Init * P2 * 
331c0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
331d0 3a 20 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a  :  Start at P2.*
331e0 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f  *.** Programs co
331f0 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69  ntain a single i
33200 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
33210 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20 76 65  opcode as the ve
33220 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f  ry first.** opco
33230 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61  de..**.** If tra
33240 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20  cing is enabled 
33250 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f  (by the sqlite3_
33260 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61  trace()) interfa
33270 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ce, then.** the 
33280 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e  UTF-8 string con
33290 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20  tained in P4 is 
332a0 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74  emitted on the t
332b0 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a  race callback..*
332c0 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c  * Or if P4 is bl
332d0 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72  ank, use the str
332e0 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20  ing returned by 
332f0 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a  sqlite3_sql()..*
33300 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
33310 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  t zero, jump to 
33320 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
33330 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a  */.case OP_Init:
33340 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a   {          /* j
33350 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ump */.  char *z
33360 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a  Trace;.  char *z
33370 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  ;..  if( pOp->p2
33380 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
33390 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69  ->p2 - 1;.  }.#i
333a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
333b0 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62  T_TRACE.  if( db
333c0 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21  ->xTrace.   && !
333d0 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20  p->doingRerun.  
333e0 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
333f0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
33400 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
33410 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d  !=0.  ){.    z =
33420 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
33430 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29  ndSql(p, zTrace)
33440 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65  ;.    db->xTrace
33450 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
33460 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  z);.    sqlite3D
33470 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20  bFree(db, z);.  
33480 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
33490 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a  USE_FCNTL_TRACE.
334a0 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
334b0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
334c0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
334d0 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
334e0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
334f0 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
33500 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
33510 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
33520 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20  treeMask, i)==0 
33530 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
33540 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
33550 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61  ontrol(db, db->a
33560 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c  Db[i].zName, SQL
33570 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c  ITE_FCNTL_TRACE,
33580 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a   zTrace);.    }.
33590 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
335a0 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
335b0 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53  RACE */.#ifdef S
335c0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
335d0 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
335e0 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
335f0 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  =0.   && (zTrace
33600 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
33610 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
33620 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
33630 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
33640 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
33650 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
33660 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
33670 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
33680 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
33690 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20  OMIT_TRACE */.  
336a0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
336b0 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
336c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
336d0 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
336e0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
336f0 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
33700 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
33710 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
33720 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
33730 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
33740 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
33750 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
33760 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
33770 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
33780 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
33790 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
337a0 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
337b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
337c0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
337d0 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
337e0 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
337f0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
33800 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
33810 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
33820 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
33830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
33840 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
33850 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
33860 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  in */.  assert( 
33870 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
33880 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Noop || pOp->opc
33890 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
338a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
338b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
33900 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68   The cases of th
33910 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
33920 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69  nt above this li
33930 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65  ne should all be
33940 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20   indented.** by 
33950 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74  6 spaces.  But t
33960 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73  he left-most 6 s
33970 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20  paces have been 
33980 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f  removed to impro
33990 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62  ve the.** readab
339a0 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69  ility.  From thi
339b0 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c  s point on down,
339c0 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65   the normal inde
339d0 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72  ntation rules ar
339e0 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a  e.** restored..*
339f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20  ************/.  
33a40 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45    }..#ifdef VDBE
33a50 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20  _PROFILE.    {. 
33a60 20 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65       u64 endTime
33a70 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
33a80 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e  ();.      if( en
33a90 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f  dTime>start ) pO
33aa0 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64  p->cycles += end
33ab0 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20  Time - start;.  
33ac0 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a      pOp->cnt++;.
33ad0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
33ae0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
33af0 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
33b00 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
33b10 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
33b20 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
33b30 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
33b40 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
33b50 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
33b60 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
33b70 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
33b80 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
33b90 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
33ba0 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
33bb0 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
33bc0 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
33bd0 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
33be0 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
33bf0 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
33c00 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
33c10 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
33c20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
33c30 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
33c40 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
33c50 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
33c60 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
33c70 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e  if( rc!=0 ) prin
33c80 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29  tf("rc=%d\n",rc)
33c90 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
33ca0 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c  >opflags & (OPFL
33cb0 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
33cc0 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b  E|OPFLG_OUT2) ){
33cd0 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65  .        registe
33ce0 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20  rTrace(pOp->p2, 
33cf0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
33d00 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
33d10 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
33d20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a  & OPFLG_OUT3 ){.
33d30 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
33d40 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26  Trace(pOp->p3, &
33d50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
33d60 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
33d70 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ndif  /* SQLITE_
33d80 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20  DEBUG */.#endif 
33d90 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20   /* NDEBUG */.  
33da0 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66  }  /* The end of
33db0 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f   the for(;;) loo
33dc0 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f  p the loops thro
33dd0 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a  ugh opcodes */..
33de0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
33df0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
33e00 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75  means that execu
33e10 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64  tion is finished
33e20 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72   with.  ** an er
33e30 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ror of some kind
33e40 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f  ..  */.vdbe_erro
33e50 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74  r_halt:.  assert
33e60 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20  ( rc );.  p->rc 
33e70 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65  = rc;.  testcase
33e80 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
33e90 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
33ea0 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72  .  sqlite3_log(r
33eb0 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62  c, "statement ab
33ec0 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d  orts at %d: [%s]
33ed0 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20   %s", .         
33ee0 20 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d            pc, p-
33ef0 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
33f00 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
33f10 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20  eHalt(p);.  if( 
33f20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
33f30 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c  _NOMEM ) db->mal
33f40 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
33f50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
33f60 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53  OR;.  if( resetS
33f70 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29  chemaOnFault>0 )
33f80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  {.    sqlite3Res
33f90 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
33fa0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
33fb0 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  lt-1);.  }..  /*
33fc0 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
33fd0 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
33fe0 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
33ff0 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
34000 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
34010 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
34020 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
34030 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
34040 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
34050 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
34060 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74  = lastRowid;.  t
34070 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70  estcase( nVmStep
34080 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e  >0 );.  p->aCoun
34090 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
340a0 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b  TATUS_VM_STEP] +
340b0 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a  = (int)nVmStep;.
340c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61    sqlite3VdbeLea
340d0 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  ve(p);.  return 
340e0 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
340f0 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
34100 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
34110 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
34120 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
34130 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
34140 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
34150 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
34160 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
34170 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
34180 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20  too big");.  rc 
34190 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b  = SQLITE_TOOBIG;
341a0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
341b0 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
341c0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
341d0 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e   malloc() fails.
341e0 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20  .  */.no_mem:.  
341f0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
34200 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53   = 1;.  sqlite3S
34210 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
34220 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f  rMsg, db, "out o
34230 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63  f memory");.  rc
34240 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
34250 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
34260 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a  or_halt;..  /* J
34270 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20  ump to here for 
34280 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f  any other kind o
34290 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20  f fatal error.  
342a0 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c  The "rc" variabl
342b0 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f  e.  ** should ho
342c0 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d  ld the error num
342d0 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f  ber..  */.abort_
342e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20  due_to_error:.  
342f0 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d  assert( p->zErrM
34300 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64  sg==0 );.  if( d
34310 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
34320 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
34330 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  MEM;.  if( rc!=S
34340 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
34350 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  M ){.    sqlite3
34360 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
34370 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
34380 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
34390 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  c));.  }.  goto 
343a0 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
343b0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
343c0 65 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74  ere if the sqlit
343d0 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41  e3_interrupt() A
343e0 50 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65  PI sets the inte
343f0 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e  rrupt.  ** flag.
34400 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
34410 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  to_interrupt:.  
34420 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69  assert( db->u1.i
34430 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a  sInterrupted );.
34440 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
34450 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63  TERRUPT;.  p->rc
34460 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33   = rc;.  sqlite3
34470 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
34480 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
34490 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
344a0 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  c));.  goto vdbe
344b0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a     _error_halt;.}.