/ Hex Artifact Content
Login

Artifact f72cc550d2c63f6d98f00991e6ed18b25232d5b216c059db52aeb73002c8202b:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c    /* Before call
2500: 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46  ing sqlite3VdbeF
2510: 72 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73  reeCursor(), ens
2520: 75 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65  ure the isEpheme
2530: 72 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20  ral flag.    ** 
2540: 69 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77  is clear. Otherw
2550: 69 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20  ise, if this is 
2560: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  an ephemeral cur
2570: 73 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a  sor created by .
2580: 20 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75      ** OP_OpenDu
2590: 70 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  p, the cursor wi
25a0: 6c 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64  ll not be closed
25b0: 20 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20   and will still 
25c0: 62 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f  be part.    ** o
25d0: 66 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75  f a BtShared.pCu
25e0: 72 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20  rsor list.  */. 
25f0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2600: 5d 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  ]->isEphemeral =
2610: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
2620: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2630: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2640: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2650: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2660: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2670: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2680: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2690: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
26a0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
26b0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
26c0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
26d0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
26e0: 6f 66 66 73 65 74 6f 66 28 56 64 62 65 43 75 72  offsetof(VdbeCur
26f0: 73 6f 72 2c 70 41 6c 74 43 75 72 73 6f 72 29 29  sor,pAltCursor))
2700: 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43 75 72 54  ;.    pCx->eCurT
2710: 79 70 65 20 3d 20 65 43 75 72 54 79 70 65 3b 0a  ype = eCurType;.
2720: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2730: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2740: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2750: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
2760: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
2770: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 65 43  eld];.    if( eC
2780: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2790: 42 54 52 45 45 20 29 7b 0a 20 20 20 20 20 20 70  BTREE ){.      p
27a0: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
27b0: 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20   (BtCursor*).   
27c0: 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b         &pMem->z[
27d0: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
27e0: 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a  beCursor))+2*siz
27f0: 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d  eof(u32)*nField]
2800: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
2810: 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f 28 70  treeCursorZero(p
2820: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
2830: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2840: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2850: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2860: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
2870: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2880: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
2890: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
28a0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
28b0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
28c0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
28d0: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
28e0: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
28f0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2900: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2910: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2920: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2930: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2940: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2950: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2960: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
2970: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
2980: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
2990: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
29a0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
29b0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
29c0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
29d0: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
29e0: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
29f0: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2a00: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2a10: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2a20: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2a30: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2a40: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2a50: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2a60: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
2a70: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
2a80: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
2a90: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
2aa0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
2ab0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
2ac0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2ad0: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2ae0: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2af0: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2b00: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2b10: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2b20: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2b30: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2b40: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2b50: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2b60: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
2b70: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
2b80: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
2b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
2ba0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
2bb0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
2bc0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2bd0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2be0: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2bf0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2c00: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2c10: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2c20: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2c30: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2c40: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2c50: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2c60: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2c70: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2c80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
2c90: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
2ca0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2cb0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
2cc0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2cd0: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2ce0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2cf0: 65 63 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 54 45  ec);.  }.  /* TE
2d00: 58 54 2d 3e 4e 55 4d 45 52 49 43 20 69 73 20 6d  XT->NUMERIC is m
2d10: 61 6e 79 2d 3e 6f 6e 65 2e 20 20 48 65 6e 63 65  any->one.  Hence
2d20: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
2d30: 74 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20  t to invalidate 
2d40: 74 68 65 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20  the.  ** string 
2d50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 61  representation a
2d60: 66 74 65 72 20 63 6f 6d 70 75 74 69 6e 67 20 61  fter computing a
2d70: 20 6e 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c   numeric equival
2d80: 65 6e 74 2c 20 62 65 63 61 75 73 65 20 74 68 65  ent, because the
2d90: 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20 72 65 70  .  ** string rep
2da0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  resentation migh
2db0: 74 20 6e 6f 74 20 62 65 20 74 68 65 20 63 61 6e  t not be the can
2dc0: 6f 6e 69 63 61 6c 20 72 65 70 72 65 73 65 6e 74  onical represent
2dd0: 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 20 20  ation for the.  
2de0: 2a 2a 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65  ** numeric value
2df0: 2e 20 20 54 69 63 6b 65 74 20 5b 33 34 33 36 33  .  Ticket [34363
2e00: 34 39 34 32 64 64 35 34 61 62 35 37 62 37 30 32  4942dd54ab57b702
2e10: 34 5d 20 32 30 31 38 2d 30 31 2d 33 31 2e 20 2a  4] 2018-01-31. *
2e20: 2f 0a 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  /.  pRec->flags 
2e30: 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a 7d 0a 0a  &= ~MEM_Str;.}..
2e40: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
2e50: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
2e60: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
2e70: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
2e80: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2e90: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
2ea0: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
2eb0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
2ec0: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
2ed0: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
2ee0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2ef0: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2f00: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2f10: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2f20: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2f30: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
2f40: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
2f50: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
2f60: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
2f70: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
2f80: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
2f90: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
2fa0: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
2fb0: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2fd0: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
2fe0: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2ff0: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
3000: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
3010: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
3020: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
3030: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
3040: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
3050: 42 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  BLOB:.**    No-o
3060: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
3070: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
3080: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
3090: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
30a0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
30b0: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
30c0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
30d0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
30e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
30f0: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
3100: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3120: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
3130: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
3140: 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c  f( affinity>=SQL
3150: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
3160: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
3170: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
3180: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
3190: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31a0: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
31b0: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
31c0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
31d0: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28  MERIC );.    if(
31e0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
31f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f  MEM_Int)==0 ){ /
3200: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
3210: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69  -FALSE*/.      i
3220: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
3230: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
3240: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52  {.        if( pR
3250: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3260: 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72  Str ) applyNumer
3270: 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  icAffinity(pRec,
3280: 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  1);.      }else{
3290: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
32a0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
32b0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20  ity(pRec);.     
32c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
32d0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
32e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
32f0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74  {.    /* Only at
3300: 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72  tempt the conver
3310: 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20  sion to TEXT if 
3320: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
3330: 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20  ger or real.    
3340: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
3350: 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c  n (blob and NULL
3360: 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76   do not get conv
3370: 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74  erted) but no st
3380: 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72  ring.    ** repr
3390: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20  esentation.  It 
33a0: 77 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73  would be harmles
33b0: 73 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20  s to repeat the 
33c0: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20  conversion if . 
33d0: 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61     ** there is a
33e0: 6c 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20  lready a string 
33f0: 72 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70  rep, but it is p
3400: 6f 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74  ointless to wast
3410: 65 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43  e those.    ** C
3420: 50 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20  PU cycles. */.  
3430: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
3440: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29  flags&MEM_Str) )
3450: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
3460: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
3470: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
3480: 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  gs&(MEM_Real|MEM
3490: 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20  _Int)) ){.      
34a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34b0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
34c0: 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  enc, 1);.      }
34d0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
34e0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
34f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
3500: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
3510: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
3520: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
3530: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
3540: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
3550: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
3560: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
3570: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
3580: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
3590: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
35a0: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
35b0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
35c0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
35d0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
35e0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
35f0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
3600: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
3610: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
3620: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
3630: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
3640: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
3650: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74  ue *pVal){.  int
3660: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
3670: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
3680: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
3690: 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20  SQLITE_TEXT ){. 
36a0: 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28     Mem *pMem = (
36b0: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61  Mem*)pVal;.    a
36c0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
36d0: 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20  ity(pMem, 0);.  
36e0: 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65    eType = sqlite
36f0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
3700: 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  l);.  }.  return
3710: 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   eType;.}../*.**
3720: 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f   Exported versio
3730: 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69  n of applyAffini
3740: 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77  ty(). This one w
3750: 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f  orks on sqlite3_
3760: 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20  value*, .** not 
3770: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d  the internal Mem
3780: 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20  * type..*/.void 
3790: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
37a0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c  yAffinity(.  sql
37b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
37c0: 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  , .  u8 affinity
37d0: 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20  , .  u8 enc.){. 
37e0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28   applyAffinity((
37f0: 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69  Mem *)pVal, affi
3800: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f  nity, enc);.}../
3810: 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e  *.** pMem curren
3820: 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61  tly only holds a
3830: 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72   string type (or
3840: 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68   maybe a BLOB th
3850: 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74  at we can.** int
3860: 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69  erpret as a stri
3870: 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f  ng if we want to
3880: 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20  ).  Compute its 
3890: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
38a0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69   numeric type, i
38b0: 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20  f has one.  Set 
38c0: 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e  the pMem->u.r an
38d0: 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c  d pMem->u.i fiel
38e0: 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c  ds.** accordingl
38f0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3900: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
3910: 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54   computeNumericT
3920: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
3930: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
3940: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3950: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
3960: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
3970: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3980: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
3990: 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  =0 );.  ExpandBl
39a0: 6f 62 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ob(pMem);.  if( 
39b0: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65 6d  sqlite3AtoF(pMem
39c0: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c  ->z, &pMem->u.r,
39d0: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
39e0: 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  enc)==0 ){.    r
39f0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
3a00: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  f( sqlite3Atoi64
3a10: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3a20: 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.i, pMem->n, p
3a30: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
3a40: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49      return MEM_I
3a50: 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  nt;.  }.  return
3a60: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a   MEM_Real;.}../*
3a70: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
3a80: 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72 20  umeric type for 
3a90: 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d  pMem, either MEM
3aa0: 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c  _Int or MEM_Real
3ab0: 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e   or both or.** n
3ac0: 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c  one.  .**.** Unl
3ad0: 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ike applyNumeric
3ae0: 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69 73  Affinity(), this
3af0: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f   routine does no
3b00: 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66  t modify pMem->f
3b10: 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20  lags..** But it 
3b20: 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75  does set pMem->u
3b30: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3b40: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a   appropriately..
3b50: 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e 75  */.static u16 nu
3b60: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
3b70: 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d  Mem){.  if( pMem
3b80: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3b90: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
3ba0: 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d      return pMem-
3bb0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3bc0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d  t|MEM_Real);.  }
3bd0: 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61  .  if( pMem->fla
3be0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3bf0: 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72  M_Blob) ){.    r
3c00: 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d  eturn computeNum
3c10: 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a  ericType(pMem);.
3c20: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
3c30: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
3c40: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
3c50: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
3c60: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
3c70: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
3c80: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
3c90: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
3ca0: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
3cb0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
3cc0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
3cd0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
3ce0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
3cf0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
3d00: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
3d10: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
3d20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
3d30: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
3d40: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
3d50: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
3d60: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
3d70: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
3d80: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
3d90: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3da0: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
3db0: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
3dc0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3dd0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
3de0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
3df0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
3e00: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
3e10: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3e20: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3e30: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3e40: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3e50: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3e60: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
3e70: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3e80: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3e90: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3ea0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3eb0: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  c = 's';.    }. 
3ec0: 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 63     *(zCsr++) = c
3ed0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3ee0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3ef0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3f00: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3f10: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3f20: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3f30: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3f40: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3f50: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3f60: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3f70: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3f80: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3f90: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3fa0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3fb0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3fc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3fd0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3fe0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3ff0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
4000: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
4010: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
4020: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
4030: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
4040: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
4050: 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66 28  ) = ']';.    if(
4060: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
4070: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
4080: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
4090: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
40a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
40b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
40c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
40d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
40e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
40f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
4100: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
4110: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
4120: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
4130: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
4140: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
4150: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
4160: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
4170: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
4180: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
4190: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
41a0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
41b0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
41c0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
41d0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
41e0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
41f0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
4200: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
4210: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
4220: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
4230: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
4240: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
4250: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
4260: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
4270: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
4280: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
4290: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
42a0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
42b0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
42c0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
42d0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
42e0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
42f0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
4300: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
4310: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
4320: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
4330: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
4340: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
4350: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
4360: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
4370: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
4380: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4390: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
43a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
43b0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
43c0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
43d0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
43e0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
43f0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
4400: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
4410: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
4420: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4430: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
4440: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
4450: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
4460: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
4470: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
4480: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
4490: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
44a0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
44b0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
44c0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
44d0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
44e0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
44f0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d 3e  {.    printf(p->
4500: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
4510: 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67   ? " NULL-nochng
4520: 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  " : " NULL");.  
4530: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
4540: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
4550: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
4560: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
4570: 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a 25     printf(" si:%
4580: 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20  lld", p->u.i);. 
4590: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
45a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
45b0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 3a  .    printf(" i:
45c0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
45d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
45e0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
45f0: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
4600: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
4610: 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  al ){.    printf
4620: 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72  (" r:%g", p->u.r
4630: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
4640: 65 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62  e if( sqlite3Vdb
4650: 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 29 20  eMemIsRowSet(p) 
4660: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
4670: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
4680: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
4690: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
46a0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
46b0: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
46c0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
46d0: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20  ", zBuf);.  }.  
46e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
46f0: 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69  EM_Subtype ) pri
4700: 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78  ntf(" subtype=0x
4710: 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79  %02x", p->eSubty
4720: 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  pe);.}.static vo
4730: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
4740: 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a  (int iReg, Mem *
4750: 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45  p){.  printf("RE
4760: 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29  G[%d] = ", iReg)
4770: 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  ;.  memTracePrin
4780: 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22  t(p);.  printf("
4790: 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  \n");.  sqlite3V
47a0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
47b0: 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64  iants(p);.}.#end
47c0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
47d0: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
47e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
47f0: 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61  (R,M) if(db->fla
4800: 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72  gs&SQLITE_VdbeTr
4810: 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63  ace)registerTrac
4820: 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20  e(R,M).#else.#  
4830: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
4840: 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69  TRACE(R,M).#endi
4850: 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f  f...#ifdef VDBE_
4860: 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20  PROFILE../* .** 
4870: 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e  hwtime.h contain
4880: 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c  s inline assembl
4890: 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c  er code for impl
48a0: 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67  ementing .** hig
48b0: 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69  h-performance ti
48c0: 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a  ming routines..*
48d0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69  /.#include "hwti
48e0: 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23  me.h"..#endif..#
48f0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
4900: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
4910: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
4920: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
4930: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
4940: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
4950: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
4960: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
4970: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
4980: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
4990: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
49a0: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
49b0: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
49c0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
49d0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
49e0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
49f0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
4a00: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
4a10: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
4a20: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
4a30: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
4a40: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
4a50: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
4a60: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
4a70: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
4a80: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
4a90: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
4aa0: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
4ab0: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
4ac0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
4ad0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
4ae0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
4af0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
4b00: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4b10: 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 70  he register of p
4b20: 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72  Op->p2 after fir
4b30: 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74 20  st preparing it 
4b40: 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69  to be.** overwri
4b50: 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74  tten with an int
4b60: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  eger value..*/.s
4b70: 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49  tatic SQLITE_NOI
4b80: 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50  NLINE Mem *out2P
4b90: 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65  rereleaseWithCle
4ba0: 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20  ar(Mem *pOut){. 
4bb0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
4bc0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
4bd0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
4be0: 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20  M_Int;.  return 
4bf0: 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d  pOut;.}.static M
4c00: 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61  em *out2Prerelea
4c10: 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65  se(Vdbe *p, Vdbe
4c20: 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20  Op *pOp){.  Mem 
4c30: 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28  *pOut;.  assert(
4c40: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4c50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
4c60: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
4c70: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
4c80: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
4c90: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
4ca0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
4cb0: 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65  Out);.  if( Vdbe
4cc0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
4cd0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
4ce0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
4cf0: 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65    return out2Pre
4d00: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
4d10: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
4d20: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
4d30: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
4d40: 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d  return pOut;.  }
4d50: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
4d60: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
4d70: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
4d80: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
4d90: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
4da0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4db0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4dc0: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4dd0: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4de0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4df0: 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f  E */.){.  Op *aO
4e00: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
4e10: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4e20: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
4e30: 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20  pOp = aOp;      
4e40: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
4e50: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
4e60: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4e70: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
4e80: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
4e90: 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b  ).  Op *pOrigOp;
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4eb0: 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61  * Value of pOp a
4ec0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
4ed0: 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a   loop */.#endif.
4ee0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4ef0: 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61  BUG.  int nExtra
4f00: 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20  Delete = 0;     
4f10: 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52   /* Verifies FOR
4f20: 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45  DELETE and AUXDE
4f30: 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65  LETE flags */.#e
4f40: 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20  ndif.  int rc = 
4f50: 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
4f60: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
4f70: 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  turn */.  sqlite
4f80: 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20  3 *db = p->db;  
4f90: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4fa0: 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73  base */.  u8 res
4fb0: 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
4fc0: 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63  = 0; /* Reset sc
4fd0: 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72  hema after an er
4fe0: 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65 20  ror if positive 
4ff0: 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67  */.  u8 encoding
5000: 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20   = ENC(db);     
5010: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5020: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
5030: 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20  t iCompare = 0; 
5040: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
5050: 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61  lt of last compa
5060: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67  rison */.  unsig
5070: 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b  ned nVmStep = 0;
5080: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5090: 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  of virtual machi
50a0: 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e  ne steps */.#ifn
50b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50c0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
50d0: 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72  K.  unsigned nPr
50e0: 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f  ogressLimit;   /
50f0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
5100: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
5110: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
5120: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
5130: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
5140: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
5150: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
5160: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
5170: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
5180: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
5190: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
51a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
51b0: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
51c0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
51d0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
51e0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
51f0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
5200: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
5210: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
5220: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66  t operand */.#if
5230: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
5240: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
5250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5260: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
5270: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
5280: 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
5290: 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43  /*** INSERT STAC
52a0: 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a  K UNION HERE ***
52b0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
52c0: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
52d0: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
52e0: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
52f0: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73  fies this */.  s
5300: 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28  qlite3VdbeEnter(
5310: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
5320: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
5330: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
5340: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
5350: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
5360: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
5370: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
5380: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
5390: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
53a0: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
53b0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
53c0: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
53d0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
53e0: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
53f0: 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74  BUSY );.  assert
5400: 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c  ( p->bIsReader |
5410: 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30  | p->readOnly!=0
5420: 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e   );.  p->iCurren
5430: 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73  tTime = 0;.  ass
5440: 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d  ert( p->explain=
5450: 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75  =0 );.  p->pResu
5460: 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d  ltSet = 0;.  db-
5470: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75  >busyHandler.nBu
5480: 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62  sy = 0;.  if( db
5490: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
54a0: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
54b0: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
54c0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
54d0: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
54e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
54f0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
5500: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
5510: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75  rogress ){.    u
5520: 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61  32 iPrior = p->a
5530: 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
5540: 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
5550: 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  P];.    assert( 
5560: 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  0 < db->nProgres
5570: 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f  sOps );.    nPro
5580: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d  gressLimit = db-
5590: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
55a0: 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50  (iPrior % db->nP
55b0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d  rogressOps);.  }
55c0: 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72  else{.    nProgr
55d0: 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66  essLimit = 0xfff
55e0: 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69  fffff;.  }.#endi
55f0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
5600: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
5610: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
5620: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
5630: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
5640: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
5650: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
5660: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
5670: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
5680: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
5690: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
56a0: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
56b0: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
56c0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
56d0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
56e0: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
56f0: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
5700: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
5710: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
5720: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
5730: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
5740: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
5750: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
5760: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
5770: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
5780: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
5790: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
57a0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
57b0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
57c0: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
57d0: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
57e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
57f0: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
5800: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
5810: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
5820: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
5830: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
5840: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
5850: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5860: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
5870: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
5880: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
5890: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
58a0: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
58b0: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
58c0: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
58d0: 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26  ndif.  for(pOp=&
58e0: 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70  aOp[p->pc]; 1; p
58f0: 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72  Op++){.    /* Er
5900: 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74 65  rors are detecte
5910: 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20  d by individual 
5920: 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e  opcodes, with an
5930: 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a   immediate.    *
5940: 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74  * jumps to abort
5950: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a  _due_to_error. *
5960: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  /.    assert( rc
5970: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
5980: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
5990: 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70  =aOp && pOp<&aOp
59a0: 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65  [p->nOp]);.#ifde
59b0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
59c0: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
59d0: 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f 20  e3NProfileCnt ? 
59e0: 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
59f0: 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74 69  nt : sqlite3Hwti
5a00: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
5a10: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64   nVmStep++;.#ifd
5a20: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5a30: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
5a40: 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45 78  .    if( p->anEx
5a50: 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28  ec ) p->anExec[(
5a60: 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b  int)(pOp-aOp)]++
5a70: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  ;.#endif..    /*
5a80: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
5a90: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
5aa0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
5ab0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
5ac0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
5ad0: 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
5ae0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
5af0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5b00: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
5b10: 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  ut, (int)(pOp - 
5b20: 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20  aOp), pOp);.    
5b30: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
5b40: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
5b50: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
5b60: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
5b70: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
5b80: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
5b90: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
5ba0: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
5bb0: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
5bc0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
5bd0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5be0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
5bf0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5c00: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5c10: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5c20: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5c30: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5c40: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5c50: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
5c60: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
5c70: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
5c80: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
5c90: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
5ca0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5cb0: 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 38  G.    {.      u8
5cc0: 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73 71   opProperty = sq
5cd0: 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
5ce0: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
5cf0: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  ;.      if( (opP
5d00: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5d10: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5d20: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5d30: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p1>0 );.        
5d40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
5d50: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5d60: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5d70: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5d80: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5d90: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
5da0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
5db0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
5dc0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5dd0: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
5de0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5df0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
5e00: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
5e10: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5e20: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5e30: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5e40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5e50: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5e60: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5e70: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
5e80: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
5e90: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5ea0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5eb0: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
5ec0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5ed0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5ee0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5ef0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
5f00: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5f10: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
5f20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5f30: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5f40: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5f50: 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b  OPFLG_IN3)!=0 ){
5f60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5f70: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5f80: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5f90: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
5fa0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5fb0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5fc0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5fd0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5fe0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5ff0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
6000: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
6010: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
6020: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
6030: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
6040: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
6050: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
6060: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
6070: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d   & OPFLG_OUT2)!=
6080: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
6090: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
60a0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
60b0: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
60c0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
60d0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d  or) );.        m
60e0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
60f0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
6100: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
6110: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
6120: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21  y & OPFLG_OUT3)!
6130: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
6140: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
6150: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
6160: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
6170: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6180: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
6190: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
61a0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
61b0: 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
61c0: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
61d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
61e0: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
61f0: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20  DBE_PROFILE).   
6200: 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a   pOrigOp = pOp;.
6210: 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77  #endif.  .    sw
6220: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
6230: 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  e ){../*********
6240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c  ****.** What fol
6290: 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76  lows is a massiv
62a0: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
62b0: 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61  nt where each ca
62c0: 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a  se implements a.
62d0: 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74  ** separate inst
62e0: 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76  ruction in the v
62f0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
6300: 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68   If we follow th
6310: 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e  e usual.** inden
6320: 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f  tation conventio
6330: 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68  ns, each case sh
6340: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
6350: 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
6360: 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20  ut.** that is a 
6370: 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70  lot of wasted sp
6380: 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20  ace on the left 
6390: 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20  margin.  So the 
63a0: 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74  code within.** t
63b0: 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
63c0: 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77  ent will break w
63d0: 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61  ith convention a
63e0: 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74  nd be flush-left
63f0: 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67  . Another.** big
6400: 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61   comment (simila
6410: 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77  r to this one) w
6420: 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69  ill mark the poi
6430: 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77  nt in the code w
6440: 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73  here.** we trans
6450: 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f  ition back to no
6460: 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
6470: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d  ..**.** The form
6480: 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63  atting of each c
6490: 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ase is important
64a0: 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20  .  The makefile 
64b0: 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65  for SQLite.** ge
64c0: 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69  nerates two C fi
64d0: 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20  les "opcodes.h" 
64e0: 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20  and "opcodes.c" 
64f0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
6500: 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67  .** file looking
6510: 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20   for lines that 
6520: 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65  begin with "case
6530: 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f   OP_".  The opco
6540: 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77  des.h files.** w
6550: 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69  ill be filled wi
6560: 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74  th #defines that
6570: 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74   give unique int
6580: 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65  eger values to e
6590: 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e  ach.** opcode an
65a0: 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20  d the opcodes.c 
65b0: 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77  file is filled w
65c0: 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ith an array of 
65d0: 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a  strings where.**
65e0: 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20   each string is 
65f0: 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d  the symbolic nam
6600: 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73  e for the corres
6610: 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20  ponding opcode. 
6620: 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20   If the.** case 
6630: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c  statement is fol
6640: 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65  lowed by a comme
6650: 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  nt of the form "
6660: 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23  /# same as ... #
6670: 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65  /".** that comme
6680: 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  nt is used to de
6690: 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74  termine the part
66a0: 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20  icular value of 
66b0: 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  the opcode..**.*
66c0: 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73  * Other keywords
66d0: 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20   in the comment 
66e0: 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63  that follows eac
66f0: 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20  h case are used 
6700: 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20  to.** construct 
6710: 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41  the OPFLG_INITIA
6720: 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74  LIZER value that
6730: 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63   initializes opc
6740: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a  odeProperty[]..*
6750: 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75  * Keywords inclu
6760: 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e  de: in1, in2, in
6770: 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20  3, out2, out3.  
6780: 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63  See.** the mkopc
6790: 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20  odeh.awk script 
67a0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
67b0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
67c0: 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  * Documentation 
67d0: 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64  about VDBE opcod
67e0: 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  es is generated 
67f0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
6800: 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e   file.** for lin
6810: 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61  es of that conta
6820: 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54  in "Opcode:".  T
6830: 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c  hat line and all
6840: 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63   subsequent.** c
6850: 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65  omment lines are
6860: 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
6870: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  eration of the o
6880: 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d  pcode.html docum
6890: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65  entation.** file
68a0: 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a  ..**.** SUMMARY:
68b0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61  .**.**     Forma
68c0: 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61  tting is importa
68d0: 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68  nt to scripts th
68e0: 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c  at scan this fil
68f0: 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74  e..**     Do not
6900: 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68   deviate from th
6910: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79  e formatting sty
6920: 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  le currently in 
6930: 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  use..**.********
6940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6980: 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  *****/../* Opcod
6990: 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20  e:  Goto * P2 * 
69a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63  * *.**.** An unc
69b0: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20  onditional jump 
69c0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
69d0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72  * The next instr
69e0: 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20  uction executed 
69f0: 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20  will be .** the 
6a00: 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20  one at index P2 
6a10: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
6a20: 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f  ng of.** the pro
6a30: 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  gram..**.** The 
6a40: 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P1 parameter is 
6a50: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65  not actually use
6a60: 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
6a70: 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a  .  However, it.*
6a80: 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73  * is sometimes s
6a90: 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  et to 1 instead 
6aa0: 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74  of 0 as a hint t
6ab0: 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  o the command-li
6ac0: 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74  ne shell.** that
6ad0: 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68   this Goto is th
6ae0: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
6af0: 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  op and that the 
6b00: 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f  lines from P2 do
6b10: 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72  wn.** to the cur
6b20: 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64  rent line should
6b30: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72   be indented for
6b40: 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e   EXPLAIN output.
6b50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f  .*/.case OP_Goto
6b60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
6b70: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f  /* jump */.jump_
6b80: 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
6b90: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
6ba0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6bb0: 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20  >p2 - 1];..  /* 
6bc0: 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65  Opcodes that are
6bd0: 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74   used as the bot
6be0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f  tom of a loop (O
6bf0: 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c  P_Next, OP_Prev,
6c00: 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20  .  ** OP_VNext, 
6c10: 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  or OP_SorterNext
6c20: 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20  ) all jump here 
6c30: 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65  upon.  ** comple
6c40: 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20  tion.  Check to 
6c50: 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  see if sqlite3_i
6c60: 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20 62  nterrupt() has b
6c70: 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20  een called.  ** 
6c80: 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72 65  or if the progre
6c90: 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64  ss callback need
6ca0: 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e  s to be invoked.
6cb0: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73   .  **.  ** This
6cc0: 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72   code uses unstr
6cd0: 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73  uctured "goto" s
6ce0: 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f  tatements and do
6cf0: 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61  es not look clea
6d00: 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74  n..  ** But that
6d10: 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73   is not due to s
6d20: 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62  loppy coding hab
6d30: 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73  its. The code is
6d40: 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20   written this.  
6d50: 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f  ** way for perfo
6d60: 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64  rmance, to avoid
6d70: 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74   having to run t
6d80: 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64  he interrupt and
6d90: 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63   progress.  ** c
6da0: 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f  hecks on every o
6db0: 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c  pcode.  This hel
6dc0: 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ps sqlite3_step(
6dd0: 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31  ) to run about 1
6de0: 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20  .5%.  ** faster 
6df0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61  according to "va
6e00: 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61  lgrind --tool=ca
6e10: 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65  chegrind" */.che
6e20: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
6e30: 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  :.  if( db->u1.i
6e40: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
6e50: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
6e60: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e  _interrupt;.#ifn
6e70: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
6e80: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
6e90: 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20  K.  /* Call the 
6ea0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6eb0: 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69  k if it is confi
6ec0: 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65  gured and the re
6ed0: 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20  quired number.  
6ee0: 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68  ** of VDBE ops h
6ef0: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
6f00: 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20  d (either since 
6f10: 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20  this invocation 
6f20: 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  of.  ** sqlite3V
6f30: 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e  dbeExec() or sin
6f40: 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65  ce last time the
6f50: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6f60: 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a  ck was called)..
6f70: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
6f80: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
6f90: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
6fa0: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
6fb0: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
6fc0: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
6fd0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
6fe0: 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53 74 65   */.  if( nVmSte
6ff0: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
7000: 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65  t && db->xProgre
7010: 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ss!=0 ){.    ass
7020: 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65  ert( db->nProgre
7030: 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20  ssOps!=0 );.    
7040: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
7050: 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e   nVmStep + db->n
7060: 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e  ProgressOps - (n
7070: 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67  VmStep%db->nProg
7080: 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66  ressOps);.    if
7090: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  ( db->xProgress(
70a0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
70b0: 29 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67  ) ){.      nProg
70c0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66  ressLimit = 0xff
70d0: 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 72 63  ffffff;.      rc
70e0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
70f0: 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  UPT;.      goto 
7100: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
7110: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  or;.    }.  }.#e
7120: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
7130: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7140: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
7150: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
7160: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
7170: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
7180: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
7190: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
71a0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
71b0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
71c0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
71d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
71e0: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
71f0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
7200: 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20  rsor) );.  pIn1 
7210: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7220: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
7230: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
7240: 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75  ==0 );.  memAbou
7250: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
7260: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  1);.  pIn1->flag
7270: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
7280: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
7290: 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47  (pOp-aOp);.  REG
72a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
72b0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f  >p1, pIn1);..  /
72c0: 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72  * Most jump oper
72d0: 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f  ations do a goto
72e0: 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e   to this spot in
72f0: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
7300: 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f  .  ** the pOp po
7310: 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74  inter. */.jump_t
7320: 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61  o_p2:.  pOp = &a
7330: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
7340: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7350: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
7360: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
7370: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
7380: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
7390: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
73a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
73b0: 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75   After.** the ju
73c0: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
73d0: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
73e0: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
73f0: 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20  turn: {         
7400: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
7410: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
7420: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
7430: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
7440: 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  Int );.  pOp = &
7450: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
7460: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
7470: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
7480: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7490: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
74a0: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
74b0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
74c0: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
74d0: 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20  t it will Yield 
74e0: 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  to the coroutine
74f0: 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61  .** located at a
7500: 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  ddress P3..**.**
7510: 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74   If P2!=0 then t
7520: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
7530: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65  lementation imme
7540: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a  diately follows.
7550: 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
7560: 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68   So jump over th
7570: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
7580: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a  ementation to.**
7590: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a   address P2..**.
75a0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64  ** See also: End
75b0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
75c0: 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69  e OP_InitCorouti
75d0: 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d  ne: {     /* jum
75e0: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
75f0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70  Op->p1>0 &&  pOp
7600: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
7610: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
7620: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
7630: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
7640: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
7650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
7660: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
7670: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
7680: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7690: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
76a0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
76b0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
76c0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
76d0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
76e0: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
76f0: 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  >p2 ) goto jump_
7700: 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
7710: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45  }../* Opcode:  E
7720: 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a  ndCoroutine P1 *
7730: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
7740: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
7750: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
7760: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20  egister P1 is a 
7770: 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74  Yield..** Jump t
7780: 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  o the P2 paramet
7790: 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64  er of that Yield
77a0: 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a  ..** After the j
77b0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
77c0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
77d0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
77e0: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
77f0: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64  e.*/.case OP_End
7800: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
7810: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
7820: 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c  .  VdbeOp *pCall
7830: 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  er;.  pIn1 = &aM
7840: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7850: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
7860: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
7870: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75   assert( pIn1->u
7880: 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75  .i>=0 && pIn1->u
7890: 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  .i<p->nOp );.  p
78a0: 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49  Caller = &aOp[pI
78b0: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65  n1->u.i];.  asse
78c0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63  rt( pCaller->opc
78d0: 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b  ode==OP_Yield );
78e0: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
78f0: 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61  er->p2>=0 && pCa
7900: 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20  ller->p2<p->nOp 
7910: 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  );.  pOp = &aOp[
7920: 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d  pCaller->p2 - 1]
7930: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
7940: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
7950: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7960: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
7970: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
7980: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
7990: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
79a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
79b0: 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a  ster P1.  This.*
79c0: 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  * has the effect
79d0: 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20   of yielding to 
79e0: 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a  a coroutine..**.
79f0: 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74  ** If the corout
7a00: 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e  ine that is laun
7a10: 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  ched by this ins
7a20: 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69  truction ends wi
7a30: 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52  th.** Yield or R
7a40: 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69  eturn then conti
7a50: 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nue to the next 
7a60: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
7a70: 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f  t if.** the coro
7a80: 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62  utine launched b
7a90: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
7aa0: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
7ab0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68  EndCoroutine, th
7ac0: 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61  en jump to P2 ra
7ad0: 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e  ther than contin
7ae0: 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a  uing with the.**
7af0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
7b00: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
7b10: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7b20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
7b30: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
7b40: 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a  /* in1, jump */.
7b50: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
7b60: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
7b70: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
7b80: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
7b90: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49  pIn1)==0 );.  pI
7ba0: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
7bb0: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
7bc0: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
7bd0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7be0: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7bf0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7c00: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
7c10: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63  .  pOp = &aOp[pc
7c20: 44 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest];.  break;.
7c30: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
7c40: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
7c50: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
7c60: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d  opsis: if r[P3]=
7c70: 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20  null halt.**.** 
7c80: 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
7c90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
7ca0: 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74   If it is NULL t
7cb0: 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a  hen Halt using.*
7cc0: 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20  * parameter P1, 
7cd0: 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66  P2, and P4 as if
7ce0: 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c   this were a Hal
7cf0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
7d00: 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  If the.** value 
7d10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
7d20: 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
7d30: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
7d40: 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65   a no-op..** The
7d50: 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68   P5 parameter sh
7d60: 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61  ould be 1..*/.ca
7d70: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
7d80: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
7d90: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
7da0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
7db0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
7dc0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
7dd0: 45 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74  E_Abort ){ sqlit
7de0: 65 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72  e3VdbeAssertAbor
7df0: 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64  table(p); }.#end
7e00: 69 66 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  if.  if( (pIn3->
7e10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
7e20: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
7e30: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
7e40: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
7e50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
7e60: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  alt P1 P2 * P4 P
7e70: 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  5.**.** Exit imm
7e80: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
7e90: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63  pen cursors, etc
7ea0: 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61   are closed.** a
7eb0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a  utomatically..**
7ec0: 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65  .** P1 is the re
7ed0: 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e  sult code return
7ee0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78  ed by sqlite3_ex
7ef0: 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65  ec(), sqlite3_re
7f00: 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c  set(),.** or sql
7f10: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e  ite3_finalize().
7f20: 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68    For a normal h
7f30: 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  alt, this should
7f40: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30   be SQLITE_OK (0
7f50: 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73  )..** For errors
7f60: 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65  , it can be some
7f70: 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49   other value.  I
7f80: 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20  f P1!=0 then P2 
7f90: 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a  will determine.*
7fa0: 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
7fb0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   to rollback the
7fc0: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
7fd0: 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f  tion.  Do not ro
7fe0: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d  llback.** if P2=
7ff0: 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65  =OE_Fail. Do the
8000: 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d   rollback if P2=
8010: 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49  =OE_Rollback.  I
8020: 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a  f P2==OE_Abort,.
8030: 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74  ** then back out
8040: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
8050: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
8060: 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63  during this exec
8070: 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ution of the.** 
8080: 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74  VDBE, but do not
8090: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
80a0: 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a  ansaction. .**.*
80b0: 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e  * If P4 is not n
80c0: 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ull then it is a
80d0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
80e0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35  string..**.** P5
80f0: 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77   is a value betw
8100: 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63  een 0 and 4, inc
8110: 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64  lusive, that mod
8120: 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72  ifies the P4 str
8130: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a  ing..**.**    0:
8140: 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a    (no change).**
8150: 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c      1:  NOT NULL
8160: 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65   contraint faile
8170: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20  d: P4.**    2:  
8180: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
8190: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
81a0: 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e     3:  CHECK con
81b0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
81c0: 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52  P4.**    4:  FOR
81d0: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
81e0: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
81f0: 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
8200: 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73  t zero and P4 is
8210: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72   NULL, then ever
8220: 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65  ything after the
8230: 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74   ":" is.** omitt
8240: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ed..**.** There 
8250: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
8260: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
8270: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
8280: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
8290: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
82a0: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
82b0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
82c0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
82d0: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
82e0: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
82f0: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
8300: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
8310: 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
8320: 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20  e;.  int pcx;.. 
8330: 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70   pcx = (int)(pOp
8340: 20 2d 20 61 4f 70 29 3b 0a 23 69 66 64 65 66 20   - aOp);.#ifdef 
8350: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
8360: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41  f( pOp->p2==OE_A
8370: 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56  bort ){ sqlite3V
8380: 64 62 65 41 73 73 65 72 74 41 62 6f 72 74 61 62  dbeAssertAbortab
8390: 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  le(p); }.#endif.
83a0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
83b0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
83c0: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
83d0: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
83e0: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
83f0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
8400: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
8410: 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
8420: 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61  ame;.    p->pFra
8430: 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61  me = pFrame->pPa
8440: 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72  rent;.    p->nFr
8450: 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74  ame--;.    sqlit
8460: 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
8470: 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
8480: 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69  ;.    pcx = sqli
8490: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
84a0: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
84b0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
84c0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
84d0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
84e0: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
84f0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
8500: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
8510: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
8520: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
8530: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
8540: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
8550: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
8560: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
8570: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
8580: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
8590: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
85a0: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
85b0: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
85c0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
85d0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
85e0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
85f0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
8600: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
8610: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
8620: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
8630: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
8640: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
8650: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
8660: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
8670: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
8680: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
8690: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
86a0: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
86b0: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
86c0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
86d0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
86e0: 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70  p5<=4 );.  if( p
86f0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
8700: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
8710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8720: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
8730: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
8740: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
8750: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
8790: 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63  " };.      testc
87a0: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
87b0: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
87c0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
87d0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
87e0: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
87f0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8800: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
8810: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8820: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
8830: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61  raint failed", a
8840: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
8850: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
8860: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8870: 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
8880: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
8890: 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a  , "%z: %s", p->z
88a0: 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e  ErrMsg, pOp->p4.
88b0: 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
88c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
88d0: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
88e0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
88f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
8900: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
8910: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
8920: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78  n [%s]: %s", pcx
8930: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
8940: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
8950: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
8960: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
8970: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8980: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
8990: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
89a0: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
89b0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
89c0: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
89d0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
89e0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
89f0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8a00: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
8a10: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
8a20: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8a30: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8a40: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8a50: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8a60: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8a70: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8a80: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8a90: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8aa0: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
8ab0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
8ac0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
8ad0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
8ae0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
8af0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
8b00: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
8b10: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
8b20: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8b30: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8b40: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8b50: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8b60: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8b70: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8b80: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8b90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8ba0: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
8bb0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8bc0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
8bd0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
8be0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
8bf0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
8c00: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
8c10: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8c20: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8c30: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8c40: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8c50: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8c60: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8c70: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8c80: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8c90: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8ca0: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
8cb0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
8cc0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
8cd0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
8ce0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
8cf0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8d00: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
8d10: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8d20: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
8d30: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8d40: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8d50: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8d60: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8d70: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8d80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8d90: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8da0: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8db0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8dc0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
8dd0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
8de0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
8df0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
8e00: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
8e10: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
8e20: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
8e30: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8e40: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8e50: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8e60: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8e70: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8e80: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8e90: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8ea0: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
8eb0: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
8ec0: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
8ed0: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
8ee0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
8ef0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
8f00: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
8f10: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
8f20: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
8f30: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8f40: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8f50: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8f60: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8f70: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8f80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8f90: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8fa0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8fb0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8fc0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8fd0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8fe0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
8ff0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
9000: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
9010: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
9020: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
9030: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
9040: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
9050: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
9060: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
9070: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
9080: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
9090: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
90a0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
90b0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
90c0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
90d0: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20  ITE_TOOBIG );.  
90e0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
90f0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
9100: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
9110: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
9120: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
9130: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
9140: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
9150: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
9160: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
9170: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
9180: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
9190: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
91a0: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
91b0: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
91c0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
91d0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
91e0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
91f0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
9200: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
9210: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
9220: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
9230: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
9240: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
9250: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
9260: 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d  .  testcase( rc=
9270: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
9280: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
9290: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
92a0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
92b0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
92c0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
92d0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
92e0: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20  LITE_OK );.  /* 
92f0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
9300: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
9310: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
9320: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
9330: 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ng P1 P2 P3 P4 P
9340: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
9350: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
9360: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
9370: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
9380: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
9390: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
93a0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
93b0: 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a  * If P3 is not z
93c0: 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  ero and the cont
93d0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
93e0: 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  P3 is equal to P
93f0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  5, then.** the d
9400: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
9410: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
9420: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
9430: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
9440: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
9450: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
9460: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
9470: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
9480: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
9490: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
94a0: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
94b0: 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  T.  In other wor
94c0: 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33  ds:.**.** if( P3
94d0: 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d  !=0 and reg[P3]=
94e0: 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d  =P5 ) reg[P2] :=
94f0: 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73   CAST(reg[P2] as
9500: 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB).*/.case O
9510: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
9520: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9530: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9540: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
9550: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
9560: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
9570: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
9580: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
9590: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
95a0: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
95b0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
95c0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
95d0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
95e0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
95f0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
9600: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
9610: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
9620: 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
9630: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
9640: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
9650: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9660: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
9670: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
9680: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
9690: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
96a0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
96b0: 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29  ->u.i==pOp->p5 )
96c0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
96d0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
96e0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
96f0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
9700: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
9710: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
9720: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9730: 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  P2..P3]=NULL.**.
9740: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
9750: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9760: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
9770: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
9780: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
9790: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
97a0: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
97b0: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
97c0: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
97d0: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
97e0: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
97f0: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
9800: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
9810: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
9820: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
9830: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
9840: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
9850: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
9860: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
9870: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
9880: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
9890: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
98a0: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
98b0: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
98c0: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
98d0: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
98e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
98f0: 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  t2 */.  int cnt;
9900: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
9910: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9920: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9930: 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70  ;.  cnt = pOp->p
9940: 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  3-pOp->p2;.  ass
9950: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
9960: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9970: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9980: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
9990: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
99a0: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
99b0: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
99c0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b  ;.  pOut->n = 0;
99d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
99e0: 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e 75 54 65  EBUG.  pOut->uTe
99f0: 6d 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  mp = 0;.#endif. 
9a00: 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b   while( cnt>0 ){
9a10: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
9a20: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
9a30: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
9a40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9a50: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
9a60: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
9a70: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75  ullFlag;.    pOu
9a80: 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e  t->n = 0;.    cn
9a90: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
9aa0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9ab0: 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20  SoftNull P1 * * 
9ac0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9ad0: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
9ae0: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
9af0: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
9b00: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
9b10: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
9b20: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
9b30: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
9b40: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
9b50: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
9b60: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
9b70: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
9b80: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
9b90: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
9ba0: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
9bb0: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
9bc0: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
9bd0: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
9be0: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
9bf0: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
9c00: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
9c10: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
9c20: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9c30: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
9c40: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9c50: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9c60: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9c70: 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74  t->flags = (pOut
9c80: 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e  ->flags&~(MEM_Un
9c90: 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d  defined|MEM_AffM
9ca0: 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ask))|MEM_Null;.
9cb0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9cc0: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
9cd0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9ce0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28  psis: r[P2]=P4 (
9cf0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34  len=P1).**.** P4
9d00: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
9d10: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
9d20: 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20  es long.  Store 
9d30: 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20  this.** blob in 
9d40: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
9d50: 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20  case OP_Blob: { 
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9d70: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
9d80: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
9d90: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
9da0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
9db0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9dc0: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
9dd0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
9de0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
9df0: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
9e00: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9e10: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9e20: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9e30: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9e40: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
9e50: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
9e60: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9e70: 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50  ]=parameter(P1,P
9e80: 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  4).**.** Transfe
9e90: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
9ea0: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
9eb0: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
9ec0: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
9ed0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
9ee0: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
9ef0: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
9f00: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
9f10: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
9f20: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
9f30: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
9f40: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
9f50: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
9f60: 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a   out2 */.  Mem *
9f70: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
9f80: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
9f90: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73  ferred */..  ass
9fa0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9fb0: 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56  & pOp->p1<=p->nV
9fc0: 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ar );.  assert( 
9fd0: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
9fe0: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74  pOp->p4.z==sqlit
9ff0: 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
a000: 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e  (p->pVList,pOp->
a010: 70 31 29 20 29 3b 0a 20 20 70 56 61 72 20 3d 20  p1) );.  pVar = 
a020: 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31  &p->aVar[pOp->p1
a030: 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c   - 1];.  if( sql
a040: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
a050: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67  g(pVar) ){.    g
a060: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
a070: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a080: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
a090: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a0a0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72  wCopy(pOut, pVar
a0b0: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
a0c0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
a0d0: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
a0e0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a0f0: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
a100: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a110: 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40  : r[P2@P3]=r[P1@
a120: 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  P3].**.** Move t
a130: 68 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20  he P3 values in 
a140: 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b  register P1..P1+
a150: 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a  P3-1 over into.*
a160: 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  * registers P2..
a170: 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74  P2+P3-1.  Regist
a180: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ers P1..P1+P3-1 
a190: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
a1a0: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
a1b0: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
a1c0: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
a1d0: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61  ** P1..P1+P3-1 a
a1e0: 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74  nd P2..P2+P3-1 t
a1f0: 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69  o overlap.  It i
a200: 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f  s an error.** fo
a210: 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20  r P3 to be less 
a220: 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  than 1..*/.case 
a230: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74  OP_Move: {.  int
a240: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
a250: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
a260: 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  ters left to cop
a270: 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  y */.  int p1;  
a280: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
a290: 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d  ter to copy from
a2a0: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
a2b0: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
a2c0: 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f  er to copy to */
a2d0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
a2e0: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
a2f0: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
a300: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
a310: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
a320: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
a330: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
a340: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
a350: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
a360: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64  = &aMem[p2];.  d
a370: 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o{.    assert( p
a380: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  Out<=&aMem[(p->n
a390: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
a3a0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
a3b0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
a3c0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
a3d0: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
a3e0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
a3f0: 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
a400: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
a410: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
a420: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
a430: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
a440: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
a450: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
a460: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
a470: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
a480: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74  >pScopyFrom<pOut
a490: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
a4a0: 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f  pScopyFrom += pO
a4b0: 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20  p->p2 - p1;.    
a4c0: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65  }.#endif.    Dee
a4d0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
a4e0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
a4f0: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
a500: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
a510: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
a520: 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72  ile( --n );.  br
a530: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a540: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
a550: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a560: 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50  : r[P2@P3+1]=r[P
a570: 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  1@P3+1].**.** Ma
a580: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
a590: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
a5a0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
a5b0: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
a5c0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
a5d0: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
a5e0: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
a5f0: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
a600: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
a610: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
a620: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
a630: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
a640: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
a650: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
a660: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
a670: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a680: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
a690: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
a6a0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
a6b0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
a6c0: 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  {.    memAboutTo
a6d0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
a6e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
a6f0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
a700: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
a710: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
a720: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
a730: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a740: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
a750: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
a760: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
a770: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
a780: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
a790: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
a7a0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
a7b0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
a7c0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
a7d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a7e0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
a7f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a800: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a810: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
a820: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
a830: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
a840: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
a850: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
a860: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
a870: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
a880: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
a890: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
a8a0: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
a8b0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
a8c0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
a8d0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
a8e0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
a8f0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
a900: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
a910: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
a920: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
a930: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
a940: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
a950: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
a960: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
a970: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
a980: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
a990: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
a9a0: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
a9b0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
a9c0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
a9d0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
a9e0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
a9f0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
aa00: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
aa10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
aa20: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
aa30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
aa40: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
aa50: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
aa60: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
aa70: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
aa80: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
aa90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
aaa0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
aab0: 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74  m = pIn1;.  pOut
aac0: 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73 20 3d 20  ->mScopyFlags = 
aad0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e  pIn1->flags;.#en
aae0: 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
aaf0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f  /* Opcode: IntCo
ab00: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
ab10: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
ab20: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72  ]=r[P1].**.** Tr
ab30: 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65 67  ansfer the integ
ab40: 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  er value held in
ab50: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
ab60: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
ab70: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
ab80: 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f  optimized versio
ab90: 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20  n of SCopy that 
aba0: 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69  works only for i
abb0: 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73  nteger.** values
abc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
abd0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
abe0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
abf0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ac00: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
ac10: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
ac20: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
ac30: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ac40: 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
ac50: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
ac60: 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69  (pOut, pIn1->u.i
ac70: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ac80: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
ac90: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
aca0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74  ** Synopsis: out
acb0: 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a  put=r[P1@P2].**.
acc0: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
acd0: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
ace0: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
acf0: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
ad00: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
ad10: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
ad20: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
ad30: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
ad40: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
ad50: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
ad60: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
ad70: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
ad80: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
ad90: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
ada0: 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72   to the r(P1)..r
adb0: 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73  (P1+P2-1) values
adc0: 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
add0: 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  t row..*/.case O
ade0: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
adf0: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
ae00: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
ae10: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
ae20: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
ae30: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
ae40: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
ae50: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  1+pOp->p2<=(p->n
ae60: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
ae70: 6f 72 29 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49  or)+1 );..  /* I
ae80: 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74  f this statement
ae90: 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d   has violated im
aea0: 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
aeb0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
aec0: 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74   do.  ** not ret
aed0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
aee0: 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e  f rows modified.
aef0: 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45   And do not RELE
af00: 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ASE the statemen
af10: 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  t.  ** transacti
af20: 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20  on. It needs to 
af30: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
af40: 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45   */.  if( SQLITE
af50: 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74  _OK!=(rc = sqlit
af60: 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
af70: 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65   0)) ){.    asse
af80: 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51  rt( db->flags&SQ
af90: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
afa0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
afb0: 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
afc0: 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   );.    goto abo
afd0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
afe0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
aff0: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  e SQLITE_CountRo
b000: 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ws flag is set i
b010: 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20  n sqlite3.flags 
b020: 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  mask, then .  **
b030: 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   DML statements 
b040: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
b050: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  de to return the
b060: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
b070: 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74  .  ** modified t
b080: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
b090: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
b0a0: 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a   that a VM that.
b0b0: 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61    ** opens a sta
b0c0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
b0d0: 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68  on may invoke th
b0e0: 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a  is opcode..  **.
b0f0: 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69    ** In case thi
b100: 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74  s is such a stat
b110: 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79  ement, close any
b120: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
b130: 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e  action.  ** open
b140: 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65  ed by this VM be
b150: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63  fore returning c
b160: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73  ontrol to the us
b170: 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20  er. This is to. 
b180: 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20   ** ensure that 
b190: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
b1a0: 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79  ctions are alway
b1b0: 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76  s nested, not ov
b1c0: 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20  erlapping..  ** 
b1d0: 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74  If the open stat
b1e0: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
b1f0: 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20  n is not closed 
b200: 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75  here, then the u
b210: 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65  ser.  ** may ste
b220: 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61  p another VM tha
b230: 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20  t opens its own 
b240: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b250: 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a  ction. This.  **
b260: 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65   may lead to ove
b270: 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65  rlapping stateme
b280: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  nt transactions.
b290: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
b2a0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
b2b0: 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20  tion is never a 
b2c0: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61  top-level transa
b2d0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20  ction.  Hence.  
b2e0: 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  ** the RELEASE c
b2f0: 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65  all below can ne
b300: 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20  ver fail..  */. 
b310: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
b320: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
b330: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
b340: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20  untRows );.  rc 
b350: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
b360: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
b370: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
b380: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
b390: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20  =SQLITE_OK );.. 
b3a0: 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
b3b0: 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ll ephemeral cur
b3c0: 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a  sor row caches *
b3d0: 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20  /.  p->cacheCtr 
b3e0: 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b  = (p->cacheCtr +
b3f0: 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b   2)|1;..  /* Mak
b400: 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c  e sure the resul
b410: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
b420: 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74  t row are \000 t
b430: 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61  erminated.  ** a
b440: 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67  nd have an assig
b450: 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72  ned type.  The r
b460: 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70  esults are de-ep
b470: 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20  hemeralized as. 
b480: 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63   ** a side effec
b490: 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d  t..  */.  pMem =
b4a0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
b4b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b4c0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
b4d0: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
b4e0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
b4f0: 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b  lid(&pMem[i]) );
b500: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
b510: 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ize(&pMem[i]);. 
b520: 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
b530: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  [i].flags & MEM_
b540: 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20  Ephem)==0.      
b550: 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69        || (pMem[i
b560: 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ].flags & (MEM_S
b570: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
b580: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
b590: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
b5a0: 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  te(&pMem[i]);.  
b5b0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b5c0: 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65  (pOp->p1+i, &pMe
b5d0: 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28  m[i]);.  }.  if(
b5e0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
b5f0: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
b600: 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72 61  ..  if( db->mTra
b610: 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41 43  ce & SQLITE_TRAC
b620: 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d  E_ROW ){.    db-
b630: 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f 54  >xTrace(SQLITE_T
b640: 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54  RACE_ROW, db->pT
b650: 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a  raceArg, p, 0);.
b660: 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e    }..  /* Return
b670: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
b680: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
b690: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
b6a0: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
b6b0: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
b6c0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
b6d0: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
b6e0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b6f0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b700: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
b710: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
b720: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
b730: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
b740: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
b750: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
b760: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b770: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b780: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
b790: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
b7a0: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
b7b0: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
b7c0: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
b7d0: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
b7e0: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
b7f0: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
b800: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
b810: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
b820: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
b830: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
b840: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
b850: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
b860: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
b870: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
b880: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b890: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
b8a0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b8b0: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
b8c0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
b8d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
b8e0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
b8f0: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
b900: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b910: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
b920: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
b930: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b940: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b950: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b960: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b970: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b980: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
b990: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
b9a0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
b9b0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
b9c0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
b9d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
b9e0: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
b9f0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
ba00: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
ba10: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
ba20: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
ba30: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
ba40: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
ba50: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
ba60: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
ba70: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
ba80: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
ba90: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
baa0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
bab0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
bac0: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
bad0: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
bae0: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
baf0: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
bb00: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
bb10: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
bb20: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
bb30: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
bb40: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
bb50: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
bb60: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
bb70: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
bb80: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
bb90: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
bba0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
bbb0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
bbc0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
bbd0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bbe0: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
bbf0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
bc00: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
bc10: 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P2].**.** Add
bc20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bc30: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
bc40: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bc50: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
bc60: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
bc70: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
bc80: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
bc90: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
bca0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
bcb0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
bcc0: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
bcd0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
bce0: 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d  [P3]=r[P1]*r[P2]
bcf0: 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70  .**.**.** Multip
bd00: 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ly the value in 
bd10: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
bd20: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bd30: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
bd40: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
bd50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
bd60: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
bd70: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
bd80: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
bd90: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75  */./* Opcode: Su
bda0: 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20  btract P1 P2 P3 
bdb0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
bdc0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50   r[P3]=r[P2]-r[P
bdd0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63  1].**.** Subtrac
bde0: 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
bdf0: 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20  egister P1 from 
be00: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
be10: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
be20: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
be30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
be40: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
be50: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
be60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
be70: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .*/./* Opcode: D
be80: 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a  ivide P1 P2 P3 *
be90: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bea0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31  r[P3]=r[P2]/r[P1
beb0: 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74  ].**.** Divide t
bec0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bed0: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
bee0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bef0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
bf00: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bf10: 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50  egister P3 (P3=P
bf20: 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61  2/P1). If the va
bf30: 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73  lue in .** regis
bf40: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20  ter P1 is zero, 
bf50: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
bf60: 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68  is NULL. If eith
bf70: 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20  er input is .** 
bf80: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
bf90: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
bfa0: 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65  Opcode: Remainde
bfb0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
bfc0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
bfd0: 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]%r[P1].**
bfe0: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
bff0: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
c000: 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72  integer register
c010: 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62   P2 is divided b
c020: 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  y .** register P
c030: 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  1 and store the 
c040: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c050: 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68  er P3. .** If th
c060: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c070: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74  ter P1 is zero t
c080: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c090: 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  L..** If either 
c0a0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
c0b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c0c0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
c0d0: 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  Add:            
c0e0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c0f0: 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20  s TK_PLUS, in1, 
c100: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
c110: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
c120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c130: 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c  ame as TK_MINUS,
c140: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c150: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69  */.case OP_Multi
c160: 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20  ply:            
c170: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c180: 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  STAR, in1, in2, 
c190: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c1a0: 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20  Divide:         
c1b0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c1c0: 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c  s TK_SLASH, in1,
c1d0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
c1e0: 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a  se OP_Remainder:
c1f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
c200: 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20  same as TK_REM, 
c210: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c220: 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74  /.  char bIntint
c230: 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f  ;   /* Started o
c240: 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65  ut as two intege
c250: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20  r operands */.  
c260: 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
c270: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
c280: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
c290: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31  h inputs */.  u1
c2a0: 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a  6 type1;      /*
c2b0: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
c2c0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
c2d0: 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20  .  u16 type2;   
c2e0: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
c2f0: 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  pe of right oper
c300: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  and */.  i64 iA;
c310: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
c320: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
c330: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
c340: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
c350: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
c360: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
c370: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
c380: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
c390: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
c3a0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
c3b0: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
c3c0: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
c3d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
c3e0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
c3f0: 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e  p1];.  type1 = n
c400: 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29  umericType(pIn1)
c410: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
c420: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70  [pOp->p2];.  typ
c430: 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e2 = numericType
c440: 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d  (pIn2);.  pOut =
c450: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
c460: 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d  .  flags = pIn1-
c470: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
c480: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74 79 70  lags;.  if( (typ
c490: 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d  e1 & type2 & MEM
c4a0: 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
c4b0: 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a  iA = pIn1->u.i;.
c4c0: 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75      iB = pIn2->u
c4d0: 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  .i;.    bIntint 
c4e0: 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28  = 1;.    switch(
c4f0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
c500: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
c510: 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  d:       if( sql
c520: 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42  ite3AddInt64(&iB
c530: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
c540: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
c550: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c560: 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65  act:  if( sqlite
c570: 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41  3SubInt64(&iB,iA
c580: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
c590: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
c5a0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
c5b0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75  :  if( sqlite3Mu
c5c0: 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  lInt64(&iB,iA) )
c5d0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
c5e0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c5f0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
c600: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
c610: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
c620: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c630: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
c640: 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41  A==-1 && iB==SMA
c650: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f  LLEST_INT64 ) go
c660: 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20  to fp_math;.    
c670: 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20      iB /= iA;.  
c680: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c690: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
c6a0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  lt: {.        if
c6b0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
c6c0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c6d0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
c6e0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
c6f0: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  A = 1;.        i
c700: 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B %= iA;.       
c710: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c720: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
c730: 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65  u.i = iB;.    Me
c740: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
c750: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
c760: 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73 20  else if( (flags 
c770: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
c780: 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68  {.    goto arith
c790: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c7a0: 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  null;.  }else{. 
c7b0: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a     bIntint = 0;.
c7c0: 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20  fp_math:.    rA 
c7d0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
c7e0: 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  lValue(pIn1);.  
c7f0: 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64    rB = sqlite3Vd
c800: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
c810: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
c820: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
c830: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
c840: 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72           rB += r
c850: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
c860: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
c870: 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d  btract:    rB -=
c880: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
c890: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c8a0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20  Multiply:    rB 
c8b0: 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  *= rA;       bre
c8c0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c8d0: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
c8e0: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
c8f0: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
c900: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
c910: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
c920: 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f       if( rA==(do
c930: 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72  uble)0 ) goto ar
c940: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
c950: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
c960: 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20   rB /= rA;.     
c970: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c980: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
c990: 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20   {.        iA = 
c9a0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
c9b0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 20  lue(pIn1);.     
c9c0: 20 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56     iB = sqlite3V
c9d0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
c9e0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  );.        if( i
c9f0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
ca00: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
ca10: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
ca20: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
ca30: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
ca40: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
ca50: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
ca60: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
ca70: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
ca80: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
ca90: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
caa0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
cab0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
cac0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
cad0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
cae0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
caf0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
cb00: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
cb10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
cb20: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
cb30: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
cb40: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
cb50: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
cb60: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
cb70: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
cb80: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
cb90: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
cba0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
cbb0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
cbc0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
cbd0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
cbe0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
cbf0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
cc00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
cc10: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
cc20: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
cc30: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
cc40: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65  o a CollSeq obje
cc50: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
cc60: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
cc70: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
cc80: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
cc90: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
cca0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
ccb0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
ccc0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
ccd0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
cce0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
ccf0: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
cd00: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
cd10: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
cd20: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
cd30: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
cd40: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
cd50: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
cd60: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
cd70: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
cd80: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
cd90: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
cda0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
cdb0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
cdc0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
cdd0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
cde0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
cdf0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
ce00: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
ce10: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
ce20: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
ce30: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
ce40: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
ce50: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
ce60: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
ce70: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
ce80: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
ce90: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
cea0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
ceb0: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
cec0: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
ced0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
cee0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
cef0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
cf00: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
cf10: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
cf20: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
cf30: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
cf40: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
cf50: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
cf60: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
cf70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
cf80: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
cf90: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
cfa0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
cfb0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
cfc0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
cfd0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
cfe0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
cff0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d000: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d010: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d020: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d030: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d040: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d050: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d060: 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a  P3]=r[P1]|r[P2].
d070: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
d080: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
d090: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d0a0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
d0b0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
d0c0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d0d0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d0e0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d0f0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d100: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d110: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
d120: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
d130: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
d140: 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]<<r[P1].**.*
d150: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
d160: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
d170: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
d180: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
d190: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
d1a0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
d1b0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
d1c0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
d1d0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
d1e0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
d1f0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
d200: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
d210: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
d220: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
d230: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
d240: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d250: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
d260: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
d270: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
d280: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
d290: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
d2a0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
d2b0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
d2c0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
d2d0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
d2e0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
d2f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
d300: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
d310: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
d320: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
d330: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
d340: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
d350: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d360: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
d370: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
d380: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
d390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d3a0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
d3b0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d3c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
d3d0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
d3e0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d3f0: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
d400: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
d410: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
d420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d430: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
d440: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d450: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
d460: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
d470: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
d480: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d490: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
d4a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
d4b0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
d4c0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
d4d0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
d4e0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
d4f0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
d500: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
d510: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
d520: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
d530: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
d540: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
d550: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
d560: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
d570: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
d580: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
d590: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
d5a0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
d5b0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
d5c0: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
d5d0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
d5e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
d5f0: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
d600: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
d610: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
d620: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
d630: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
d640: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
d650: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
d660: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
d670: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
d680: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
d690: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
d6a0: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
d6b0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
d6c0: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
d6d0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
d6e0: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
d6f0: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
d700: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
d710: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
d720: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
d730: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
d740: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
d750: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
d760: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
d770: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
d780: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
d790: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
d7a0: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
d7b0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
d7c0: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
d7d0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
d7e0: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
d7f0: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
d800: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
d810: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
d820: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
d830: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
d840: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
d850: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
d860: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
d870: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
d880: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d890: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d8a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d8b0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
d8c0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
d8d0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72  ynopsis: r[P1]=r
d8e0: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
d8f0: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
d900: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
d910: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d920: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
d930: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
d940: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
d950: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
d960: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
d970: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
d980: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
d990: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d9a0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d9b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d9c0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
d9d0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
d9e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
d9f0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
da00: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
da10: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
da20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
da30: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
da40: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
da50: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
da60: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
da70: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
da80: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
da90: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
daa0: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
dab0: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
dac0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
dad0: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
dae0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
daf0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
db00: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
db10: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
db20: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
db30: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
db40: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
db50: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
db60: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
db70: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
db80: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
db90: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
dba0: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
dbb0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
dbc0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
dbd0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56  encoding);.    V
dbe0: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28  dbeBranchTaken((
dbf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
dc00: 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Int)==0, 2);.   
dc10: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
dc20: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
dc30: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
dc40: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
dc50: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
dc60: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20  ISMATCH;.       
dc70: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
dc80: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
dc90: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67  }else{.        g
dca0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
dcb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
dcc0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
dcd0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
dce0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
dcf0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
dd00: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
dd10: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
dd20: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
dd30: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
dd40: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
dd50: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
dd60: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
dd70: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
dd80: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
dd90: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
dda0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
ddb0: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
ddc0: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
ddd0: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
dde0: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
ddf0: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
de00: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
de10: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
de20: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
de30: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
de40: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
de50: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
de60: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
de70: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de90: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
dea0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
deb0: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
dec0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
ded0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
dee0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
def0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
df00: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
df10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
df20: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61  ST./* Opcode: Ca
df30: 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
df40: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
df50: 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a  nity(r[P1]).**.*
df60: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
df70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
df80: 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20   to be the type 
df90: 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a  defined by P2..*
dfa0: 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  * .** <ul>.** <l
dfb0: 69 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72  i> P2=='A' &rarr
dfc0: 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50  ; BLOB.** <li> P
dfd0: 32 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45  2=='B' &rarr; TE
dfe0: 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  XT.** <li> P2=='
dff0: 43 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49  C' &rarr; NUMERI
e000: 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44  C.** <li> P2=='D
e010: 27 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52  ' &rarr; INTEGER
e020: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27  .** <li> P2=='E'
e030: 20 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20   &rarr; REAL.** 
e040: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  </ul>.**.** A NU
e050: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
e060: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
e070: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
e080: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
e090: 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20  se OP_Cast: {   
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e0b0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
e0c0: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49  t( pOp->p2>=SQLI
e0d0: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70  TE_AFF_BLOB && p
e0e0: 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41  Op->p2<=SQLITE_A
e0f0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73  FF_REAL );.  tes
e100: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e110: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
e120: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
e130: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
e140: 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73  FF_BLOB );.  tes
e150: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e160: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e170: 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  IC );.  testcase
e180: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e190: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b  E_AFF_INTEGER );
e1a0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e1b0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e1c0: 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20  _REAL );.  pIn1 
e1d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e1e0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
e1f0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
e200: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
e210: 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
e220: 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e  3VdbeMemCast(pIn
e230: 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f  1, pOp->p2, enco
e240: 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
e250: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
e260: 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
e270: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e280: 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
e290: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
e2a0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f  ITE_OMIT_CAST */
e2b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  ../* Opcode: Eq 
e2c0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e2d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
e2e0: 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]==r[P1].**.*
e2f0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
e300: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
e310: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
e320: 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29  reg(P3)==reg(P1)
e330: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
e340: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
e350: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
e360: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
e370: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a  et in P5, then.*
e380: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
e390: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e3a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
e3b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e3c0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
e3d0: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
e3e0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
e3f0: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
e400: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
e410: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
e420: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
e430: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
e440: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
e450: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
e460: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
e470: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
e480: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
e490: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
e4a0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e4b0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
e4c0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
e4d0: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
e4e0: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
e4f0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
e500: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
e510: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
e520: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
e530: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
e540: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
e550: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
e560: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
e570: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
e580: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
e590: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
e5a0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
e5b0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
e5c0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
e5d0: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
e5e0: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
e5f0: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
e600: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
e610: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
e620: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
e630: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
e640: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
e650: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
e660: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
e670: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
e680: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
e690: 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20  n.** P4 is used 
e6a0: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
e6b0: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
e6c0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
e6d0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
e6e0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
e6f0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
e700: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
e710: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
e720: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
e730: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
e740: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
e750: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
e760: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
e770: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
e780: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e790: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
e7a0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
e7b0: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
e7c0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a  than blobs..**.*
e7d0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
e7e0: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
e7f0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e800: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e810: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
e820: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
e830: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
e840: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
e850: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
e860: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
e870: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e880: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
e890: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e8a0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e8b0: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
e8c0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
e8d0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
e8e0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
e8f0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
e900: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
e910: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
e920: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
e930: 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  P5..**.** If bot
e940: 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  h SQLITE_STOREP2
e950: 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50   and SQLITE_KEEP
e960: 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73  NULL flags are s
e970: 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63  et then the.** c
e980: 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
e990: 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
e9a0: 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
e9b0: 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66   is NULL or 0 (f
e9c0: 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68  alse)..** In oth
e9d0: 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f  er words, a prio
e9e0: 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69  r r[P2] value wi
e9f0: 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72  ll not be overwr
ea00: 69 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65  itten by 1 (true
ea10: 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  )..*/./* Opcode:
ea20: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
ea30: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
ea40: 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a  IF r[P3]!=r[P1].
ea50: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
ea60: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45   just like the E
ea70: 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  q opcode except 
ea80: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
ea90: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
eaa0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
eab0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
eac0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
ead0: 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f   See the Eq opco
eae0: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
eaf0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
eb00: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
eb10: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
eb20: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
eb30: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
eb40: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
eb50: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
eb60: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
eb70: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
eb80: 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75  s NULL or 1 (tru
eb90: 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  e)..** In other 
eba0: 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72  words, a prior r
ebb0: 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20  [P2] value will 
ebc0: 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74  not be overwritt
ebd0: 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e  en by 0 (false).
ebe0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
ebf0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ec00: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
ec10: 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a   r[P3]<r[P1].**.
ec20: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
ec30: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
ec40: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
ec50: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
ec60: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
ec70: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
ec80: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
ec90: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
eca0: 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a  et in P5 store.*
ecb0: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  * the result of 
ecc0: 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72  comparison (0 or
ecd0: 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f   1 or NULL) into
ece0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
ecf0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ed00: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
ed10: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
ed20: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
ed30: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
ed40: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
ed50: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
ed60: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
ed70: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
ed80: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
ed90: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
eda0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
edb0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
edc0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
edd0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
ede0: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
edf0: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
ee00: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
ee10: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
ee20: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
ee30: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
ee40: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
ee50: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
ee60: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
ee70: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
ee80: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
ee90: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
eea0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
eeb0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
eec0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
eed0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
eee0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
eef0: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
ef00: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
ef10: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
ef20: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
ef30: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
ef40: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
ef50: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
ef60: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
ef70: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
ef80: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
ef90: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
efa0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
efb0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
efc0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
efd0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
efe0: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
eff0: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
f000: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
f010: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
f020: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
f030: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
f040: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
f050: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
f060: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
f070: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
f080: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
f090: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
f0a0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
f0b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
f0c0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
f0d0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
f0e0: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
f0f0: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
f100: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
f110: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
f120: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
f130: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
f140: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
f150: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
f160: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
f170: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
f180: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
f190: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
f1a0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
f1b0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
f1c0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
f1d0: 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
f1e0: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
f1f0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f200: 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a  IF r[P3]<=r[P1].
f210: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f220: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f230: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f240: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f250: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f260: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
f270: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
f280: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
f290: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f2a0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f2b0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f2c0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f2d0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f2e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
f2f0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f300: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
f310: 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]>r[P1].**.**
f320: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f330: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
f340: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f350: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f360: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
f370: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f380: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
f390: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
f3a0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
f3b0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
f3c0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
f3d0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f3e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
f3f0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f400: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
f410: 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]>=r[P1].**
f420: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f430: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f440: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f450: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f460: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
f470: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
f480: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
f490: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
f4a0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
f4b0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f4c0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f4d0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f4e0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f4f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f510: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
f520: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f530: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
f540: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f550: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
f560: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
f570: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
f580: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f590: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
f5a0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
f5b0: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
f5c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f5d0: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
f5e0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
f5f0: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
f600: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f610: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
f620: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f630: 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
f640: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f650: 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
f660: 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
f670: 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20  , res2;      /* 
f680: 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  Result of the co
f690: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31  mparison of pIn1
f6a0: 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f   against pIn3 */
f6b0: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
f6c0: 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
f6d0: 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ty to use for co
f6e0: 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31  mparison */.  u1
f6f0: 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20  6 flags1;       
f700: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
f710: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
f720: 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75  n1->flags */.  u
f730: 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20  16 flags3;      
f740: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
f750: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
f760: 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20  In3->flags */.. 
f770: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
f780: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
f790: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
f7a0: 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
f7b0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73  ->flags;.  flags
f7c0: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
f7d0: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c  .  if( (flags1 |
f7e0: 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c   flags3)&MEM_Nul
f7f0: 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20  l ){.    /* One 
f800: 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  or both operands
f810: 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   are NULL */.   
f820: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f830: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a  QLITE_NULLEQ ){.
f840: 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49        /* If SQLI
f850: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f860: 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c   (which will onl
f870: 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  y happen if the 
f880: 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
f890: 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50    ** OP_Eq or OP
f8a0: 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74  _Ne) then take t
f8b0: 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64  he jump or not d
f8c0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
f8d0: 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  her.      ** or 
f8e0: 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  not both operand
f8f0: 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20  s are null..    
f900: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
f910: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
f920: 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70  OP_Eq || pOp->op
f930: 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20  code==OP_Ne );. 
f940: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
f950: 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
f960: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
f970: 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
f980: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
f990: 4e 55 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52  NULL)==0 || CORR
f9a0: 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
f9b0: 74 65 73 74 63 61 73 65 28 20 28 70 4f 70 2d 3e  testcase( (pOp->
f9c0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
f9d0: 49 46 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20  IFNULL)!=0 );.  
f9e0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
f9f0: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
fa00: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
fa10: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
fa20: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
fa30: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
fa40: 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
fa50: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
fa60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
fa70: 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72  es = 1;  /* Oper
fa80: 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
fa90: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
faa0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
fab0: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
fac0: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
fad0: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
fae0: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
faf0: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
fb00: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
fb10: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
fb20: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fb30: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
fb40: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
fb50: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
fb60: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
fb70: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
fb80: 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
fb90: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
fba0: 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61  ;.        iCompa
fbb0: 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70  re = 1;    /* Op
fbc0: 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
fbd0: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  qual */.        
fbe0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
fbf0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  (p, pOut);.     
fc00: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
fc10: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
fc20: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
fc30: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
fc40: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
fc50: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56  }else{.        V
fc60: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
fc70: 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ,3);.        if(
fc80: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
fc90: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
fca0: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a            goto j
fcb0: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
fcc0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
fcd0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
fce0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
fcf0: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
fd00: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
fd10: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
fd20: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
fd30: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
fd40: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
fd50: 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
fd60: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
fd70: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
fd80: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
fd90: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Str ){.        i
fda0: 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  f( (flags1 & (ME
fdb0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
fdc0: 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
fdd0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  r ){.          a
fde0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
fdf0: 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
fe00: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 66         assert( f
fe10: 6c 61 67 73 33 3d 3d 70 49 6e 33 2d 3e 66 6c 61  lags3==pIn3->fla
fe20: 67 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  gs );.          
fe30: 2f 2a 20 74 65 73 74 63 61 73 65 28 20 66 6c 61  /* testcase( fla
fe40: 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73  gs3!=pIn3->flags
fe50: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 2a   );.          **
fe60: 20 74 68 69 73 20 75 73 65 64 20 74 6f 20 62 65   this used to be
fe70: 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 20 70   possible with p
fe80: 49 6e 31 3d 3d 70 49 6e 33 2c 20 62 75 74 20 6e  In1==pIn3, but n
fe90: 6f 74 20 73 69 6e 63 65 0a 20 20 20 20 20 20 20  ot since.       
fea0: 20 20 20 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e     ** the column
feb0: 20 63 61 63 68 65 20 77 61 73 20 72 65 6d 6f 76   cache was remov
fec0: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
fed0: 6e 67 20 61 73 73 69 67 6e 6d 65 6e 74 0a 20 20  ng assignment.  
fee0: 20 20 20 20 20 20 20 20 2a 2a 20 69 73 20 65 73          ** is es
fef0: 73 65 6e 74 69 61 6c 6c 79 20 61 20 6e 6f 2d 6f  sentially a no-o
ff00: 70 2e 20 20 42 75 74 2c 20 69 74 20 70 72 6f 76  p.  But, it prov
ff10: 69 64 65 73 20 64 65 66 65 6e 73 65 2d 69 6e 2d  ides defense-in-
ff20: 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20  depth.          
ff30: 2a 2a 20 69 6e 20 63 61 73 65 20 6f 75 72 20 61  ** in case our a
ff40: 6e 61 6c 79 73 69 73 20 69 73 20 69 6e 63 6f 72  nalysis is incor
ff50: 72 65 63 74 2c 20 73 6f 20 69 74 20 69 73 20 6c  rect, so it is l
ff60: 65 66 74 20 69 6e 2e 20 2a 2f 0a 20 20 20 20 20  eft in. */.     
ff70: 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49       flags3 = pI
ff80: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20  n3->flags;.     
ff90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
ffa0: 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
ffb0: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
ffc0: 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
ffd0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  ){.          app
ffe0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
fff0: 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20  y(pIn3,0);.     
10000 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
10010 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68 65     /* Handle the
10020 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66 20   common case of 
10030 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69 73  integer comparis
10040 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a 20  on here, as an. 
10050 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61       ** optimiza
10060 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20 61  tion, to avoid a
10070 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
10080 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a  MemCompare() */.
10090 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
100a0 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66  >flags & pIn3->f
100b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
100c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
100d0 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70 49  ( pIn3->u.i > pI
100e0 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d  n1->u.i ){ res =
100f0 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72   +1; goto compar
10100 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20  e_op; }.        
10110 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c 20  if( pIn3->u.i < 
10120 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73  pIn1->u.i ){ res
10130 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d 70   = -1; goto comp
10140 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20  are_op; }.      
10150 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
10160 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f     goto compare_
10170 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  op;.      }.    
10180 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
10190 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
101a0 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
101b0 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53   (flags1 & MEM_S
101c0 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
101d0 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
101e0 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
101f0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10200 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10210 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10220 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10230 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10240 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
10250 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
10260 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
10270 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ing, 1);.       
10280 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67   testcase( (flag
10290 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28  s1&MEM_Dyn) != (
102a0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
102b0 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Dyn) );.        
102c0 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e  flags1 = (pIn1->
102d0 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70  flags & ~MEM_Typ
102e0 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
102f0 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29   & MEM_TypeMask)
10300 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
10310 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a  ( pIn1!=pIn3 );.
10320 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
10330 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  ( (flags3 & MEM_
10340 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10350 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10360 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10370 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10380 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10390 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
103a0 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
103b0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
103c0 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
103d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
103e0 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f  ngify(pIn3, enco
103f0 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
10400 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
10410 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs3&MEM_Dyn) != 
10420 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn3->flags&MEM
10430 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10440 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d   flags3 = (pIn3-
10450 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10460 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10470 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  3 & MEM_TypeMask
10480 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
10490 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
104a0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
104b0 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
104c0 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
104d0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  res = sqlite3Mem
104e0 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49  Compare(pIn3, pI
104f0 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c  n1, pOp->p4.pCol
10500 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f  l);.  }.compare_
10510 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69 73  op:.  /* At this
10520 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20 6e   point, res is n
10530 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20 6f  egative, zero, o
10540 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72 65  r positive if re
10550 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c 65  g[P1] is.  ** le
10560 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20 74  ss than, equal t
10570 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
10580 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73 70  an reg[P3], resp
10590 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70 75  ectively.  Compu
105a0 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73 77  te.  ** the answ
105b0 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72 61  er to this opera
105c0 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65 70  tor in res2, dep
105d0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20 74  ending on what t
105e0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20 20  he comparison.  
105f0 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74 75  ** operator actu
10600 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e 65  ally is.  The ne
10610 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
10620 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20   depends on the 
10630 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20 74  fact.  ** that t
10640 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e 20  he 6 comparison 
10650 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63 6f  operators are co
10660 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67 65  nsecutive intege
10670 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a 20  rs in this.  ** 
10680 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c 20  order:  NE, EQ, 
10690 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20 2a  GT, LE, LT, GE *
106a0 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 45  /.  assert( OP_E
106b0 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61 73  q==OP_Ne+1 ); as
106c0 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50 5f  sert( OP_Gt==OP_
106d0 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28 20  Ne+2 ); assert( 
106e0 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20 29  OP_Le==OP_Ne+3 )
106f0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 4c  ;.  assert( OP_L
10700 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61 73  t==OP_Ne+4 ); as
10710 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50 5f  sert( OP_Ge==OP_
10720 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72 65  Ne+5 );.  if( re
10730 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  s<0 ){          
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10750 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65 2c   ne, eq, gt, le,
10760 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20 73   lt, ge */.    s
10770 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10780 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b 5d  gned char aLTb[]
10790 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c 20   = { 1,  0,  0, 
107a0 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20 20   1,  1,  0 };.  
107b0 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70 4f    res2 = aLTb[pO
107c0 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
107d0 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  e];.  }else if( 
107e0 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74  res==0 ){.    st
107f0 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10800 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d 20  ned char aEQb[] 
10810 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20 20  = { 0,  1,  0,  
10820 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20 20  1,  0,  1 };.   
10830 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f 70   res2 = aEQb[pOp
10840 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e 65  ->opcode - OP_Ne
10850 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
10860 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
10870 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62 5b  igned char aGTb[
10880 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31 2c  ] = { 1,  0,  1,
10890 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20    0,  0,  1 };. 
108a0 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b 70     res2 = aGTb[p
108b0 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
108c0 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  Ne];.  }..  /* U
108d0 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
108e0 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
108f0 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
10900 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
10910 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
10920 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10930 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
10940 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10950 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10960 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10970 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10980 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10990 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
109a0 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
109b0 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
109c0 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
109d0 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
109e0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
109f0 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  ->p2];.    iComp
10a00 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20 69  are = res;.    i
10a10 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51  f( (pOp->p5 & SQ
10a20 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d  LITE_KEEPNULL)!=
10a30 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  0 ){.      /* Th
10a40 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20  e KEEPNULL flag 
10a50 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20 66  prevents OP_Eq f
10a60 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
10a70 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20 20  a NULL with 1.  
10a80 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76 65      ** and preve
10a90 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f  nts OP_Ne from o
10aa0 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20  verwriting NULL 
10ab0 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66 6c  with 0.  This fl
10ac0 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 6f  ag.      ** is o
10ad0 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e 74  nly used in cont
10ae0 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68 65  exts where eithe
10af0 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 31  r:.      **   (1
10b00 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28  ) op==OP_Eq && (
10b10 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72  r[P2]==NULL || r
10b20 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a  [P2]==0).      *
10b30 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e  *   (2) op==OP_N
10b40 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  e && (r[P2]==NUL
10b50 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20  L || r[P2]==1). 
10b60 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f 72       ** Therefor
10b70 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63 65  e it is not nece
10b80 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20 74  ssary to check t
10b90 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b  he content of r[
10ba0 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  P2] for.      **
10bb0 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20   NULL. */.      
10bc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
10bd0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f  ode==OP_Ne || pO
10be0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
10bf0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
10c00 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73  ( res2==0 || res
10c10 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  2==1 );.      te
10c20 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20  stcase( res2==0 
10c30 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
10c40 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74  OP_Eq );.      t
10c50 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31  estcase( res2==1
10c60 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
10c70 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10c80 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10c90 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
10ca0 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
10cb0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10cc0 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
10cd0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10ce0 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
10cf0 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32  de==OP_Eq)==res2
10d00 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a   ) break;.    }.
10d10 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
10d20 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
10d30 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10d40 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
10d50 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
10d60 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47 49  = res2;.    REGI
10d70 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
10d80 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
10d90 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
10da0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20  chTaken(res!=0, 
10db0 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
10dc0 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a  E_NULLEQ)?2:3);.
10dd0 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b 0a      if( res2 ){.
10de0 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
10df0 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
10e00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10e10 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45  Opcode: ElseNotE
10e20 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  q * P2 * * *.**.
10e30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6d  ** This opcode m
10e40 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ust immediately 
10e50 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20  follow an OP_Lt 
10e60 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69  or OP_Gt compari
10e70 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a  son operator..**
10e80 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61 6e   If result of an
10e90 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f   OP_Eq compariso
10ea0 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 77  n on the same tw
10eb0 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f  o operands.** wo
10ec0 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c 4c  uld have be NULL
10ed0 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20 74   or false (0), t
10ee0 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  hen then jump to
10ef0 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
10f00 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f  result of an OP_
10f10 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e  Eq comparison on
10f20 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f 75   the two previou
10f30 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f  s operands.** wo
10f40 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74 72  uld have been tr
10f50 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61 6c  ue (1), then fal
10f60 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
10f70 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a  se OP_ElseNotEq:
10f80 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65   {       /* same
10f90 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a   as TK_ESCAPE, j
10fa0 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
10fb0 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73   pOp>aOp );.  as
10fc0 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
10fd0 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70  code==OP_Lt || p
10fe0 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
10ff0 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72 74  P_Gt );.  assert
11000 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53  ( pOp[-1].p5 & S
11010 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 3b  QLITE_STOREP2 );
11020 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
11030 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20  en(iCompare!=0, 
11040 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70 61  2);.  if( iCompa
11050 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  re!=0 ) goto jum
11060 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
11070 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
11080 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
11090 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
110a0 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
110b0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
110c0 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
110d0 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a 2a  r in the next.**
110e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54   instruction.  T
110f0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69  he permutation i
11100 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
11110 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a 2a  P4 operand..**.*
11120 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
11130 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  n is only valid 
11140 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f  until the next O
11150 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68  P_Compare that h
11160 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47  as.** the OPFLAG
11170 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
11180 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c   in P5. Typicall
11190 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61  y the OP_Permuta
111a0 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20  tion should .** 
111b0 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c  occur immediatel
111c0 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f  y prior to the O
111d0 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a  P_Compare..**.**
111e0 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67   The first integ
111f0 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e 74  er in the P4 int
11200 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74 68  eger array is th
11210 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
11220 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f 65  array.** and doe
11230 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61 72  s not become par
11240 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74 61  t of the permuta
11250 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
11260 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a  _Permutation: {.
11270 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
11280 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
11290 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AY );.  assert( 
112a0 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20  pOp->p4.ai );.  
112b0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
112c0 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61 72  pcode==OP_Compar
112d0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
112e0 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c 41  Op[1].p5 & OPFLA
112f0 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20 62  G_PERMUTE );.  b
11300 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11310 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
11320 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
11330 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d  nopsis: r[P1@P3]
11340 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a   <-> r[P2@P3].**
11350 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20  .** Compare two 
11360 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73  vectors of regis
11370 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e  ters in reg(P1).
11380 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63  .reg(P1+P3-1) (c
11390 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74  all this.** vect
113a0 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  or "A") and in r
113b0 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
113c0 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
113d0 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
113e0 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
113f0 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
11400 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
11410 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  struct..**.** If
11420 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
11430 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
11440 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64  et, then the ord
11450 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  er of comparison
11460 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65   is.** determine
11470 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65  d by the most re
11480 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  cent OP_Permutat
11490 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49  ion operator.  I
114a0 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f  f the.** OPFLAG_
114b0 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63  PERMUTE bit is c
114c0 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73  lear, then regis
114d0 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ter are compared
114e0 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a   in sequential.*
114f0 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  * order..**.** P
11500 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73  4 is a KeyInfo s
11510 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
11520 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20  fines collating 
11530 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f  sequences and so
11540 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72  rt.** orders for
11550 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
11560 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f    The permutatio
11570 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67  n applies to reg
11580 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20  isters.** only. 
11590 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65   The KeyInfo ele
115a0 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73  ments are used s
115b0 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a  equentially..**.
115c0 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** The compariso
115d0 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70  n is a sort comp
115e0 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73  arison, so NULLs
115f0 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a   compare equal,.
11600 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73  ** NULLs are les
11610 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20  s than numbers, 
11620 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73  numbers are less
11630 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a   than strings,.*
11640 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  * and strings ar
11650 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  e less than blob
11660 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  s..*/.case OP_Co
11670 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  mpare: {.  int n
11680 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74  ;.  int i;.  int
11690 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20   p1;.  int p2;. 
116a0 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a   const KeyInfo *
116b0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
116c0 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  idx;.  CollSeq *
116d0 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c  pColl;    /* Col
116e0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
116f0 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74  to use on this t
11700 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65  erm */.  int bRe
11710 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  v;          /* T
11720 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49  rue for DESCENDI
11730 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f  NG sort order */
11740 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65  .  int *aPermute
11750 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65 72  ;     /* The per
11760 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69  mutation */..  i
11770 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  f( (pOp->p5 & OP
11780 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30  FLAG_PERMUTE)==0
11790 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74 65   ){.    aPermute
117a0 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
117b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61     assert( pOp>a
117c0 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
117d0 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
117e0 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  ==OP_Permutation
117f0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11800 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
11810 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
11820 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f     aPermute = pO
11830 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31 3b  p[-1].p4.ai + 1;
11840 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50 65  .    assert( aPe
11850 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d 0a  rmute!=0 );.  }.
11860 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
11870 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
11880 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
11890 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
118a0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
118b0 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
118c0 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
118d0 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20 53  Op->p2;.#ifdef S
118e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
118f0 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20 20  ( aPermute ){.  
11900 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b    int k, mx = 0;
11910 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c  .    for(k=0; k<
11920 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65 72  n; k++) if( aPer
11930 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20  mute[k]>mx ) mx 
11940 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20  = aPermute[k];. 
11950 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11960 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p1+mx<=(p->nM
11970 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11980 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11990 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
119a0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
119b0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
119c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
119d0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
119e0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
119f0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11a00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
11a10 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e  >0 && p2+n<=(p->
11a20 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11a30 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65  sor)+1 );.  }.#e
11a40 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
11a50 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  EBUG */.  for(i=
11a60 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<n; i++){.  
11a70 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65    idx = aPermute
11a80 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
11a90 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   i;.    assert( 
11aa0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11ab0 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p1+idx]) );.   
11ac0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11ad0 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78  lid(&aMem[p2+idx
11ae0 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
11af0 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
11b00 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b   &aMem[p1+idx]);
11b10 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
11b20 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d 65  ACE(p2+idx, &aMe
11b30 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p2+idx]);.    
11b40 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49 6e  assert( i<pKeyIn
11b50 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29 3b  fo->nKeyField );
11b60 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65  .    pColl = pKe
11b70 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b  yInfo->aColl[i];
11b80 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79  .    bRev = pKey
11b90 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72  Info->aSortOrder
11ba0 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  [i];.    iCompar
11bb0 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
11bc0 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
11bd0 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
11be0 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
11bf0 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
11c00 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29        if( bRev )
11c10 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f   iCompare = -iCo
11c20 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65  mpare;.      bre
11c30 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
11c40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11c50 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20  ode: Jump P1 P2 
11c60 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
11c70 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63  p to the instruc
11c80 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20  tion at address 
11c90 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65  P1, P2, or P3 de
11ca0 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
11cb0 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73  er.** in the mos
11cc0 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70  t recent OP_Comp
11cd0 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  are instruction 
11ce0 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61  the P1 vector wa
11cf0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65  s less than.** e
11d00 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
11d10 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20  ter than the P2 
11d20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69  vector, respecti
11d30 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  vely..*/.case OP
11d40 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20  _Jump: {        
11d50 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
11d60 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30    if( iCompare<0
11d70 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
11d80 63 68 54 61 6b 65 6e 28 30 2c 34 29 3b 20 70 4f  chTaken(0,4); pO
11d90 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31  p = &aOp[pOp->p1
11da0 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69   - 1];.  }else i
11db0 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
11dc0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
11dd0 54 61 6b 65 6e 28 31 2c 34 29 3b 20 70 4f 70 20  Taken(1,4); pOp 
11de0 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d  = &aOp[pOp->p2 -
11df0 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   1];.  }else{.  
11e00 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11e10 6e 28 32 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61  n(2,4); pOp = &a
11e20 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b  Op[pOp->p3 - 1];
11e30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11e40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
11e50 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
11e60 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
11e70 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29  (r[P1] && r[P2])
11e80 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
11e90 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
11ea0 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11eb0 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
11ec0 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
11ed0 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
11ee0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
11ef0 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
11f00 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
11f10 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
11f20 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
11f30 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
11f40 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
11f50 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
11f60 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
11f70 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
11f80 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
11f90 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
11fa0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
11fb0 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29  (r[P1] || r[P2])
11fc0 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
11fd0 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
11fe0 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
11ff0 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
12000 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
12010 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
12020 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
12030 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
12040 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
12050 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
12060 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
12070 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
12080 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
12090 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
120a0 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
120b0 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
120c0 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
120d0 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
120e0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
120f0 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
12100 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
12110 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
12120 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12130 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
12140 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
12150 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
12160 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
12170 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
12180 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
12190 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
121a0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
121b0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
121c0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
121d0 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d 20  NULL */..  v1 = 
121e0 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
121f0 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
12200 70 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76 32  p->p1], 2);.  v2
12210 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f   = sqlite3VdbeBo
12220 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d  oleanValue(&aMem
12230 5b 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a 20  [pOp->p2], 2);. 
12240 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
12250 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
12260 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
12270 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
12280 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
12290 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
122a0 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
122b0 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
122c0 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
122d0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
122e0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
122f0 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
12300 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
12310 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
12320 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
12330 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
12340 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
12350 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
12360 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
12370 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
12380 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
12390 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
123a0 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
123b0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
123c0 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
123d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
123e0 49 73 54 72 75 65 20 50 31 20 50 32 20 50 33 20  IsTrue P1 P2 P3 
123f0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
12400 3a 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65 73  : r[P2] = coales
12410 63 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c 50  ce(r[P1]==TRUE,P
12420 33 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54 68  3) ^ P4.**.** Th
12430 69 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65 6d  is opcode implem
12440 65 6e 74 73 20 74 68 65 20 49 53 20 54 52 55 45  ents the IS TRUE
12450 2c 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20 4e  , IS FALSE, IS N
12460 4f 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a 20  OT TRUE, and.** 
12470 49 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70 65  IS NOT FALSE ope
12480 72 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e  rators..**.** In
12490 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
124a0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
124b0 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
124c0 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61 74  lue.  Store that
124d0 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20 30  .** boolean (a 0
124e0 20 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73 74   or 1) in regist
124f0 65 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  er P2.  Or if th
12500 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
12510 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
12520 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20  LL, then the P3 
12530 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
12540 69 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65 72  ister P2.  Inver
12550 74 20 74 68 65 20 61 6e 73 77 65 72 20 69 66 20  t the answer if 
12560 50 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a 2a  P4.** is 1..**.*
12570 2a 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20 73  * The logic is s
12580 75 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20 74  ummarized like t
12590 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20  his:.**.** <ul> 
125a0 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
125b0 30 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65  0 and P4==0  the
125c0 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
125d0 5d 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c 69  ] IS TRUE.** <li
125e0 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50  > If P3==1 and P
125f0 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32  4==1  then  r[P2
12600 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46 41  ] := r[P1] IS FA
12610 4c 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50  LSE.** <li> If P
12620 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20 20  3==0 and P4==1  
12630 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72  then  r[P2] := r
12640 5b 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55 45  [P1] IS NOT TRUE
12650 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
12660 31 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68 65  1 and P4==0  the
12670 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
12680 5d 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a 2a  ] IS NOT FALSE.*
12690 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65 20  * </ul>.*/.case 
126a0 4f 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20 20  OP_IsTrue: {    
126b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
126c0 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  1, out2 */.  ass
126d0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
126e0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
126f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
12700 69 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  i==0 || pOp->p4.
12710 69 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  i==1 );.  assert
12720 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20  ( pOp->p3==0 || 
12730 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20 20  pOp->p3==1 );.  
12740 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12750 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
12760 2d 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71 6c  ->p2],.      sql
12770 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56  ite3VdbeBooleanV
12780 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alue(&aMem[pOp->
12790 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e 20  p1], pOp->p3) ^ 
127a0 70 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62 72  pOp->p4.i);.  br
127b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
127c0 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
127d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
127e0 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a  r[P2]= !r[P1].**
127f0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
12800 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
12810 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
12820 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
12830 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
12840 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
12850 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12860 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12870 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
12880 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
12890 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
128a0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
128b0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
128c0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
128d0 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
128e0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
128f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
12900 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
12910 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p2];.  if( (pIn
12920 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12930 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
12940 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12950 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c  Int64(pOut, !sql
12960 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56  ite3VdbeBooleanV
12970 61 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a 20  alue(pIn1,0));. 
12980 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
12990 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
129a0 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62  l(pOut);.  }.  b
129b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
129c0 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
129d0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
129e0 69 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b 50 31  is: r[P2]= ~r[P1
129f0 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12a00 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12a10 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12a20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12a30 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12a40 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12a50 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12a60 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12a70 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12a80 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12a90 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12aa0 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12ac0 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12ad0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12ae0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12af0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12b00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12b10 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12b20 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12b30 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12b40 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12b50 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12b60 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12b70 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12b80 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12b90 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12ba0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12bb0 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12bc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
12bd0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
12be0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
12bf0 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69  ion the first ti
12c00 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  me this opcode i
12c10 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64  s.** encountered
12c20 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74   on each invocat
12c30 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d  ion of the byte-
12c40 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a  code program.  J
12c50 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20  ump to P2.** on 
12c60 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61  the second and a
12c70 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e  ll subsequent en
12c80 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20  counters during 
12c90 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74  the same invocat
12ca0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c  ion..**.** Top-l
12cb0 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65  evel programs de
12cc0 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e  termine first in
12cd0 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70  vocation by comp
12ce0 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20  aring the P1.** 
12cf0 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20  operand against 
12d00 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f  the P1 operand o
12d10 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12d20 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69  code at the begi
12d30 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20  nning.** of the 
12d40 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65  program.  If the
12d50 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65   P1 values diffe
12d60 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  r, then fall thr
12d70 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a  ough and make.**
12d80 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20   the P1 of this 
12d90 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20  opcode equal to 
12da0 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69  the P1 of OP_Ini
12db0 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73  t.  If P1 values
12dc0 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   are.** the same
12dd0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
12de0 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73  ump..**.** For s
12df0 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72  ubprograms, ther
12e00 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69  e is a bitmask i
12e10 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20  n the VdbeFrame 
12e20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a  that determines.
12e30 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
12e40 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c  t the jump shoul
12e50 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65  d be taken.  The
12e60 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65   bitmask is nece
12e70 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65  ssary.** because
12e80 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69   the self-alteri
12e90 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f  ng code trick do
12ea0 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20  es not work for 
12eb0 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69  recursive.** tri
12ec0 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ggers..*/.case O
12ed0 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
12ee0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
12ef0 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20  .  u32 iAddr;   
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12f10 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20  Address of this 
12f20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
12f30 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b   assert( p->aOp[
12f40 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  0].opcode==OP_In
12f50 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  it );.  if( p->p
12f60 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64  Frame ){.    iAd
12f70 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  dr = (int)(pOp -
12f80 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66   p->aOp);.    if
12f90 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f  ( (p->pFrame->aO
12fa0 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28  nce[iAddr/8] & (
12fb0 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29  1<<(iAddr & 7)))
12fc0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62  !=0 ){.      Vdb
12fd0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
12fe0 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
12ff0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13000 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e  .    p->pFrame->
13010 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c  aOnce[iAddr/8] |
13020 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29  = 1<<(iAddr & 7)
13030 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
13040 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d  f( p->aOp[0].p1=
13050 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  =pOp->p1 ){.    
13060 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
13070 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
13080 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
13090 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65      }.  }.  Vdbe
130a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32  BranchTaken(0, 2
130b0 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  );.  pOp->p1 = p
130c0 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62  ->aOp[0].p1;.  b
130d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
130e0 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
130f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13100 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13110 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13120 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
13130 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
13140 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
13150 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
13160 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
13170 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13180 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13190 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
131a0 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
131b0 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
131c0 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20 20  se OP_If:  {    
131d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
131e0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
131f0 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74 65   c;.  c = sqlite
13200 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
13210 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e(&aMem[pOp->p1]
13220 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64  , pOp->p3);.  Vd
13230 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
13240 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
13250 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
13260 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
13270 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20  * Opcode: IfNot 
13280 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
13290 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
132a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
132b0 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c  gister P1 is Fal
132c0 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  se.  The value.*
132d0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
132e0 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20  false if it has 
132f0 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
13300 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  of zero.  If the
13310 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
13320 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
13330 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
13340 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
13350 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  non-zero..*/.cas
13360 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
13370 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
13380 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
13390 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65 33  ;.  c = !sqlite3
133a0 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
133b0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
133c0 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56 64   !pOp->p3);.  Vd
133d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
133e0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
133f0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
13400 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
13410 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
13420 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
13430 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
13440 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
13450 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
13460 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
13470 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
13480 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
13490 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
134a0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
134b0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
134c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
134d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
134e0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
134f0 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
13500 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
13510 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
13520 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13530 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
13540 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
13550 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13560 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
13570 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
13580 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
13590 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
135a0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
135b0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
135c0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
135d0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
135e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
135f0 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
13600 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
13610 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
13620 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
13630 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
13640 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13650 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13660 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
13670 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
13680 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13690 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
136a0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
136b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
136c0 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f 77  pcode: IfNullRow
136d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
136e0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50 31   Synopsis: if P1
136f0 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72 5b  .nullRow then r[
13700 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20 50  P3]=NULL, goto P
13710 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  2.**.** Check th
13720 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 73  e cursor P1 to s
13730 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72 72  ee if it is curr
13740 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61  ently pointing a
13750 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a 2a  t a NULL row..**
13760 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e 20   If it is, then 
13770 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33 20  set register P3 
13780 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d 70  to NULL and jump
13790 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
137a0 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  P2..** If P1 is 
137b0 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72 6f  not on a NULL ro
137c0 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  w, then fall thr
137d0 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61 6b  ough without mak
137e0 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e 67  ing any.** chang
137f0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
13800 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20 20  fNullRow: {     
13810 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
13820 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
13830 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
13840 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
13850 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
13860 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
13870 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
13880 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77 20  p->p1]->nullRow 
13890 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
138a0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d 65  beMemSetNull(aMe
138b0 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  m + pOp->p3);.  
138c0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
138d0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
138e0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
138f0 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53  _ENABLE_OFFSET_S
13900 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f 64  QL_FUNC./* Opcod
13910 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32 20  e: Offset P1 P2 
13920 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
13930 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c 69  is: r[P3] = sqli
13940 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a 2a  te_offset(P1).**
13950 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
13960 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65 20  ister r[P3] the 
13970 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f  byte offset into
13980 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13990 6c 65 20 74 68 61 74 20 69 73 20 74 68 65 0a 2a  le that is the.*
139a0 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 70  * start of the p
139b0 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20 72  ayload for the r
139c0 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
139d0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 69 73  hat cursor P1 is
139e0 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f   currently.** po
139f0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32  inting..**.** P2
13a00 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
13a10 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61 72  umber for the ar
13a20 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73 71  gument to the sq
13a30 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
13a40 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20  nction..** This 
13a50 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74 20  opcode does not 
13a60 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20 62  use P2 itself, b
13a70 75 74 20 74 68 65 20 50 32 20 76 61 6c 75 65 20  ut the P2 value 
13a80 69 73 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  is used by the.*
13a90 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  * code generator
13aa0 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20 61  .  The P1, P2, a
13ab0 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20 74  nd P3 operands t
13ac0 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 72  o this opcode ar
13ad0 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  e the.** same as
13ae0 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a   for OP_Column..
13af0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
13b00 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  e is only availa
13b10 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73  ble if SQLite is
13b20 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
13b30 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45  he.** -DSQLITE_E
13b40 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c  NABLE_OFFSET_SQL
13b50 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  _FUNC option..*/
13b60 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a  .case OP_Offset:
13b70 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
13b80 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut3 */.  VdbeCur
13b90 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
13ba0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
13bb0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13bc0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
13bd0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
13be0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
13bf0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
13c00 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
13c10 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45  >p3];.  if( NEVE
13c20 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e  R(pC==0) || pC->
13c30 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13c40 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 73  E_BTREE ){.    s
13c50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13c60 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
13c70 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
13c80 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
13c90 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74 72  pOut, sqlite3Btr
13ca0 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63 2e  eeOffset(pC->uc.
13cb0 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20  pCursor));.  }. 
13cc0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
13cd0 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
13ce0 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e  E_OFFSET_SQL_FUN
13cf0 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  C */../* Opcode:
13d00 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
13d10 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
13d20 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a  is: r[P3]=PX.**.
13d30 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13d40 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f   data that curso
13d50 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61  r P1 points to a
13d60 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75  s a structure bu
13d70 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65  ilt using.** the
13d80 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
13d90 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74  ruction.  (See t
13da0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  he MakeRecord op
13db0 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
13dc0 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  nal.** informati
13dd0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
13de0 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e  mat of the data.
13df0 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50  )  Extract the P
13e00 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66  2-th column.** f
13e10 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e  rom this record.
13e20 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c    If there are l
13e30 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20  ess that (P2+1) 
13e40 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68  .** values in th
13e50 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63  e record, extrac
13e60 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20  t a NULL..**.** 
13e70 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63  The value extrac
13e80 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ted is stored in
13e90 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
13ea0 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
13eb0 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72  d contains fewer
13ec0 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c   than P2 fields,
13ed0 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20   then extract a 
13ee0 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66  NULL.  Or,.** if
13ef0 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
13f00 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65   is a P4_MEM use
13f10 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
13f20 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73  e P4 argument as
13f30 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  .** the result..
13f40 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
13f50 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62  LAG_CLEARCACHE b
13f60 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20  it is set on P5 
13f70 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75  and P1 is a pseu
13f80 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c  do-table cursor,
13f90 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63  .** then the cac
13fa0 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72  he of the cursor
13fb0 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20   is reset prior 
13fc0 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68  to extracting th
13fd0 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65  e column..** The
13fe0 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e   first OP_Column
13ff0 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64   against a pseud
14000 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68  o-table after th
14010 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
14020 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74  ontent.** regist
14030 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73  er has changed s
14040 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20  hould have this 
14050 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49  bit set..**.** I
14060 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  f the OPFLAG_LEN
14070 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
14080 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73  G_TYPEOFARG bits
14090 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74   are set on P5 t
140a0 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  hen.** the resul
140b0 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
140c0 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  to only be used 
140d0 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
140e0 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a  of a length().**
140f0 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e   or typeof() fun
14100 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  ction, respectiv
14110 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e  ely.  The loadin
14120 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73  g of large blobs
14130 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70   can be.** skipp
14140 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
14150 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  and all content 
14160 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73  loading can be s
14170 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f  kipped for typeo
14180 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f()..*/.case OP_
14190 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20  Column: {.  int 
141a0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
141b0 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
141c0 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
141d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
141e0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
141f0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75  cursor */.  BtCu
14200 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
14210 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
14220 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  or */.  u32 *aOf
14230 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
14240 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
14250 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
14260 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
14270 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
14280 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
14290 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
142a0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
142b0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
142c0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
142d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
142e0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
142f0 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
14300 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
14310 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
14320 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
14330 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
14340 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
14350 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
14360 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
14370 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
14380 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
14390 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
143a0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
143b0 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
143c0 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
143d0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
143e0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
143f0 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
14400 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
14410 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
14420 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36  */.  u64 offset6
14430 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69  4;      /* 64-bi
14440 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33  t offset */.  u3
14450 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  2 t;            
14460 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20   /* A type code 
14470 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20  from the record 
14480 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  header */.  Mem 
14490 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  *pReg;         /
144a0 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e  * PseudoTable in
144b0 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
144c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
144d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20  [pOp->p1];.  p2 
144e0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a  = pOp->p2;..  /*
144f0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
14500 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d  ache is stale (m
14510 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74  eaning it is not
14520 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
14530 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72   at.  ** the cor
14540 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62  rect row) then b
14550 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
14560 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20  te by doing the 
14570 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20  necessary .  ** 
14580 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a  B-Tree seek. */.
14590 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
145a0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26  beCursorMoveto(&
145b0 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20  pC, &p2);.  if( 
145c0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
145d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
145e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
145f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
14600 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
14610 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
14620 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
14630 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
14640 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
14650 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
14660 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
14670 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
14680 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
14690 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
146a0 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  <pC->nField );. 
146b0 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61   aOffset = pC->a
146c0 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74  Offset;.  assert
146d0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
146e0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
146f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
14700 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
14710 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
14720 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72  llRow );.  asser
14730 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
14740 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20  =CURTYPE_SORTER 
14750 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  );..  if( pC->ca
14760 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
14770 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20  cheCtr ){       
14780 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d           /*OPTIM
14790 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
147a0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
147b0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
147c0 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
147d0 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  ==CURTYPE_PSEUDO
147e0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46   ){.        /* F
147f0 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20 63  or the special c
14800 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f  ase of as pseudo
14810 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65  -cursor, the see
14820 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20  kResult field.  
14830 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66        ** identif
14840 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65 72  ies the register
14850 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
14860 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20  record */.      
14870 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65    assert( pC->se
14880 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20  ekResult>0 );.  
14890 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d        pReg = &aM
148a0 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  em[pC->seekResul
148b0 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  t];.        asse
148c0 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20  rt( pReg->flags 
148d0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
148e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
148f0 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29  mIsValid(pReg) )
14900 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61  ;.        pC->pa
14910 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
14920 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b  szRow = pReg->n;
14930 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
14940 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
14950 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14960 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
14970 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
14980 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  st);.        got
14990 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
149a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
149b0 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20  se{.      pCrsr 
149c0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
149d0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
149e0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
149f0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
14a00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
14a10 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
14a20 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
14a30 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
14a40 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
14a50 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
14a60 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
14a70 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
14a80 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
14a90 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
14aa0 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
14ab0 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20   &pC->szRow);.  
14ac0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
14ad0 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f  szRow<=pC->paylo
14ae0 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20  adSize );.      
14af0 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f  assert( pC->szRo
14b00 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20  w<=65536 );  /* 
14b10 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  Maximum page siz
14b20 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20  e is 64KiB */.  
14b30 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
14b40 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
14b50 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
14b60 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
14b70 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74  {.        goto t
14b80 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a  oo_big;.      }.
14b90 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
14ba0 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
14bb0 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
14bc0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
14bd0 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
14be0 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b  ow, aOffset[0]);
14bf0 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72  .    pC->nHdrPar
14c00 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69  sed = 0;...    i
14c10 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66  f( pC->szRow<aOf
14c20 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20  fset[0] ){      
14c30 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14c40 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20  F-FALSE*/.      
14c50 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
14c60 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
14c70 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
14c80 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
14c90 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
14ca0 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
14cb0 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
14cc0 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
14cd0 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
14ce0 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
14cf0 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
14d00 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
14d10 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
14d20 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
14d30 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
14d40 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
14d50 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
14d60 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
14d70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20  C->szRow = 0;.. 
14d80 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
14d90 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
14da0 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
14db0 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
14dc0 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20  e header..      
14dd0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
14de0 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
14df0 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
14e00 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a  ation..      **.
14e10 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e        ** Type en
14e20 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
14e30 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
14e40 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
14e50 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20  and 5 byte.     
14e60 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
14e70 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
14e80 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
14e90 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
14ea0 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20   32 of.      ** 
14eb0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
14ec0 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
14ed0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
14ee0 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
14ef0 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65  .      ** 3-byte
14f00 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
14f10 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
14f20 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
14f30 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20  lus three.      
14f40 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
14f50 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
14f60 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
14f70 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
14f80 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  7..      */.    
14f90 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d    if( aOffset[0]
14fa0 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66   > 98307 || aOff
14fb0 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79  set[0] > pC->pay
14fc0 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20  loadSize ){.    
14fd0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14fe0 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20  mn_corrupt;.    
14ff0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
15000 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
15010 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
15020 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76    By skipping ov
15030 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65 77  er the first few
15040 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20   tests.      ** 
15050 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72  (ex: pC->nHdrPar
15060 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20  sed<=p2) in the 
15070 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65  next section, we
15080 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20 20   achieve a.     
15090 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70   ** measurable p
150a0 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e  erformance gain.
150b0 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
150c0 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  ** This branch i
150d0 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20  s taken even if 
150e0 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20  aOffset[0]==0.  
150f0 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69 73  Such a record is
15100 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20   never.      ** 
15110 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c  generated by SQL
15120 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62  ite, and could b
15130 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72  e considered cor
15140 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a  ruption, but we.
15150 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20        ** accept 
15160 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61  it for historica
15170 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e  l reasons.  When
15180 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20   aOffset[0]==0, 
15190 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20  the code this.  
151a0 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75      ** branch ju
151b0 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61 73  mps to reads pas
151c0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
151d0 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76   record, but nev
151e0 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a  er more.      **
151f0 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74 65   than a few byte
15200 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65 20  s.  Even if the 
15210 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74  record occurs at
15220 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15230 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f  page.      ** co
15240 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20  ntent area, the 
15250 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63 6f  "page header" co
15260 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70 61  mes after the pa
15270 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73  ge content and s
15280 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20  o.      ** this 
15290 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72 6d  overread is harm
152a0 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f  less.  Similar o
152b0 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63  verreads can occ
152c0 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74  ur for a corrupt
152d0 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61  .      ** databa
152e0 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a  se file..      *
152f0 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
15300 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
15310 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
15320 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
15330 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
15340 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
15350 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
15360 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b  aOffset[0]==0 );
15370 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
15380 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
15390 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  r;.    }.  }..  
153a0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20  /* Make sure at 
153b0 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20  least the first 
153c0 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20  p2+1 entries of 
153d0 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20  the header have 
153e0 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64  been.  ** parsed
153f0 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72   and valid infor
15400 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66  mation is in aOf
15410 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61  fset[] and pC->a
15420 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
15430 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
15440 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
15450 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
15460 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
15470 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
15480 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
15490 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
154a0 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
154b0 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
154c0 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
154d0 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
154e0 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
154f0 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
15500 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
15510 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
15520 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
15530 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
15540 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
15550 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
15560 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
15570 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
15580 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
15590 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
155a0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
155b0 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  tree(pC->uc.pCur
155c0 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b  sor, 0, aOffset[
155d0 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  0], &sMem);.    
155e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
155f0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
15600 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15610 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
15620 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
15630 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15640 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
15650 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  Row;.      }.  .
15660 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e        /* Fill in
15670 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e   pC->aType[i] an
15680 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c  d aOffset[i] val
15690 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ues through the 
156a0 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a  p2-th field. */.
156b0 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65      op_column_re
156c0 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20  ad_header:.     
156d0 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72   i = pC->nHdrPar
156e0 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65  sed;.      offse
156f0 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d  t64 = aOffset[i]
15700 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a  ;.      zHdr = z
15710 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f  Data + pC->iHdrO
15720 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e  ffset;.      zEn
15730 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61  dHdr = zData + a
15740 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20  Offset[0];.     
15750 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e   testcase( zHdr>
15760 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  =zEndHdr );.    
15770 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
15780 28 20 28 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20  ( (pC->aType[i] 
15790 3d 20 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30  = t = zHdr[0])<0
157a0 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  x80 ){.         
157b0 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20   zHdr++;.       
157c0 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
157d0 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74  qlite3VdbeOneByt
157e0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
157f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
15800 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
15810 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61   += sqlite3GetVa
15820 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29  rint32(zHdr, &t)
15830 3b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  ;.          pC->
15840 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20  aType[i] = t;.  
15850 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34          offset64
15860 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
15870 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b  erialTypeLen(t);
15880 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15890 20 20 20 61 4f 66 66 73 65 74 5b 2b 2b 69 5d 20     aOffset[++i] 
158a0 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
158b0 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
158c0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
158d0 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
158e0 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
158f0 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
15900 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
15910 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
15920 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
15930 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
15940 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
15950 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
15960 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
15970 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
15980 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
15990 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
159a0 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
159b0 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
159c0 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
159d0 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
159e0 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
159f0 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
15a00 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
15a10 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
15a20 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
15a30 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
15a40 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
15a50 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
15a60 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
15a70 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
15a80 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65        if( aOffse
15a90 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t[0]==0 ){.     
15aa0 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
15ab0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e        zHdr = zEn
15ac0 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65  dHdr;.        }e
15ad0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
15ae0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15af0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15b00 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15b10 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70           goto op
15b20 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
15b30 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15b40 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   }..      pC->nH
15b50 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
15b60 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
15b70 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
15b80 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
15b90 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
15ba0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
15bb0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
15bc0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15bd0 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20   t = 0;.    }.. 
15be0 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
15bf0 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74  rying to extract
15c00 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
15c10 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
15c20 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
15c30 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
15c40 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
15c50 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
15c60 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
15c70 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
15c80 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
15c90 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
15ca0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
15cb0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
15cc0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
15cd0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
15ce0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
15cf0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
15d00 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
15d10 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
15d20 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
15d30 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
15d40 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
15d50 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
15d60 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
15d70 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
15d80 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
15d90 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
15da0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
15db0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
15dc0 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  2];.  }..  /* Ex
15dd0 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
15de0 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
15df0 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
15e00 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
15e10 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
15e20 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
15e30 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
15e40 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
15e50 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
15e60 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
15e70 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
15e80 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
15e90 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
15ea0 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
15eb0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
15ec0 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
15ed0 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
15ee0 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
15ef0 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  st) ){.    sqlit
15f00 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
15f10 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61  (pDest);.  }.  a
15f20 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54  ssert( t==pC->aT
15f30 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28  ype[p2] );.  if(
15f40 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
15f50 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
15f60 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
15f70 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
15f80 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
15f90 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
15fa0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
15fb0 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
15fc0 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
15fd0 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
15fe0 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61   page */.    zDa
15ff0 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20  ta = pC->aRow + 
16000 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20  aOffset[p2];.   
16010 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20   if( t<12 ){.   
16020 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
16030 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
16040 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
16050 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
16060 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
16070 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77  e is a string, w
16080 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74  e need a persist
16090 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20  ent value, not. 
160a0 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70       ** a MEM_Ep
160b0 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73  hem value.  This
160c0 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73   branch is a fas
160d0 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74  t short-cut that
160e0 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
160f0 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69       ** to calli
16100 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ng sqlite3VdbeSe
16110 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71  rialGet() and sq
16120 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d  lite3VdbeDeephem
16130 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20  eralize()..     
16140 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
16150 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67   const u16 aFlag
16160 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c  [] = { MEM_Blob,
16170 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72   MEM_Str|MEM_Ter
16180 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m };.      pDest
16190 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31  ->n = len = (t-1
161a0 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73  2)/2;.      pDes
161b0 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
161c0 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  g;.      if( pDe
161d0 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
161e0 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
161f0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
16200 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
16210 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16220 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
16230 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
16240 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16250 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
16260 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
16270 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
16280 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
16290 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
162a0 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
162b0 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
162c0 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
162d0 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
162e0 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
162f0 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
16300 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73   }else{.    pDes
16310 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
16320 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  g;.    /* This b
16330 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
16340 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
16350 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
16360 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20  ages */.    if( 
16370 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
16380 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
16390 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
163a0 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
163b0 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
163c0 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
163d0 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
163e0 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
163f0 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
16400 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
16410 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
16420 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
16430 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
16440 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  for.      **    
16450 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  1. the typeof() 
16460 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20  function,.      
16470 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e  **    2. the len
16480 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
16490 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20  if X is a blob, 
164a0 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  and.      **    
164b0 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e  3. if the conten
164c0 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f  t length is zero
164d0 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65  ..      ** So we
164e0 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
164f0 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  se bogus content
16500 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
16510 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ding.      ** co
16520 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
16530 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20   .      **.     
16540 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c   ** Although sql
16550 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
16560 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20  t() may read at 
16570 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f  most 8 bytes fro
16580 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62  m the.      ** b
16590 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20  uffer passed to 
165a0 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75  it, debugging fu
165b0 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72  nction VdbeMemPr
165c0 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a  ettyPrint() may.
165d0 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70        ** read up
165e0 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79   to 16. So 16 by
165f0 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e  tes of bogus con
16600 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64  tent is supplied
16610 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16620 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
16630 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69  [16];  /* This i
16640 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74  s the bogus cont
16650 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ent */.      sql
16660 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
16670 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73  t(aZero, t, pDes
16680 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
16690 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
166a0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
166b0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
166c0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
166d0 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  en, pDest);.    
166e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
166f0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16700 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16710 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16720 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
16730 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
16740 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
16750 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
16760 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
16770 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  }.  }..op_column
16780 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
16790 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
167a0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
167b0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
167c0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a  est);.  break;..
167d0 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
167e0 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e  t:.  if( aOp[0].
167f0 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20  p3>0 ){.    pOp 
16800 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33  = &aOp[aOp[0].p3
16810 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  -1];.    break;.
16820 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
16830 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
16840 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
16850 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16860 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70  or;.  }.}../* Op
16870 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
16880 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
16890 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
168a0 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
168b0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
168c0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
168d0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
168e0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
168f0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
16900 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16910 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16920 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63   The N-th charac
16930 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
16940 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
16950 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
16960 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
16970 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e  e used for the N
16980 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  -th.** memory ce
16990 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
169a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
169b0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
169c0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
169d0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
169e0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
169f0 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
16a00 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
16a10 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
16a20 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
16a30 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
16a40 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
16a50 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
16a60 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
16a70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b  [pOp->p1];.  do{
16a80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
16a90 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
16aa0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
16ab0 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
16ac0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16ad0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
16ae0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
16af0 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  1, *(zAffinity++
16b00 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
16b10 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69    pIn1++;.  }whi
16b20 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
16b30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
16b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
16b50 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
16b60 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
16b70 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
16b80 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
16b90 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
16ba0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
16bb0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
16bc0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
16bd0 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
16be0 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
16bf0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
16c00 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
16c10 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
16c20 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
16c30 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
16c40 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
16c50 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
16c60 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
16c70 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
16c80 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
16c90 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
16ca0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
16cb0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
16cc0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
16cd0 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
16ce0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
16cf0 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
16d00 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
16d10 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16d20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16d30 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16d40 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16d50 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16d60 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16d70 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16d80 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
16d90 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
16da0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
16db0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
16dc0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
16dd0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
16de0 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
16df0 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
16e00 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16e10 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16e20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16e30 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16e40 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16e50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16e60 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16e70 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16e80 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
16e90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16ea0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
16eb0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
16ec0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
16ed0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
16ee0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
16ef0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
16f00 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
16f10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16f20 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16f30 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16f40 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16f50 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16f60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16f70 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16f80 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
16f90 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
16fa0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
16fb0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
16fc0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
16fd0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
16fe0 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
16ff0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
17000 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
17010 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
17020 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
17030 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
17040 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17050 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
17060 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
17070 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
17080 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
17090 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
170a0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
170b0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
170c0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
170d0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
170e0 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
170f0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
17100 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
17110 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
17120 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
17130 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
17140 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
17150 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
17160 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
17170 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
17180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
17190 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
171a0 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
171b0 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
171c0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
171d0 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
171e0 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
171f0 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
17200 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
17210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17240 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
17250 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
17260 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
17270 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
17280 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
17290 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
172a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172e0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
172f0 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
17300 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
17310 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
17320 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
17330 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
17340 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
17350 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
17360 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
17370 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
17380 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
17390 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
173a0 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
173b0 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
173c0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
173d0 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
173e0 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
173f0 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
17400 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
17410 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
17420 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
17430 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
17440 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
17450 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
17460 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
17470 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
17480 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
17490 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
174a0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
174b0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
174c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
174d0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
174e0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
174f0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
17500 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
17510 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
17520 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
17530 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
17540 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
17550 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
17560 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
17570 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
17580 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
17590 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
175a0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
175b0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
175c0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
175d0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
175e0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
175f0 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
17600 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
17610 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
17620 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
17630 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
17640 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
17650 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
17660 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
17670 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
17680 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
17690 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
176a0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
176b0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
176c0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
176d0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
176e0 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
176f0 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
17700 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
17710 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
17720 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
17730 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17740 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
17750 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
17760 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
17770 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
17780 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
17790 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
177a0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
177b0 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
177c0 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
177d0 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
177e0 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
177f0 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
17800 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
17810 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
17820 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
17830 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
17840 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
17850 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
17860 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
17870 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
17880 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
17890 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
178a0 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
178b0 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
178c0 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
178d0 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
178e0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
178f0 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
17900 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
17910 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
17920 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
17930 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
17940 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
17950 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
17960 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
17970 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
17980 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
17990 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
179a0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
179b0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
179c0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
179d0 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
179e0 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
179f0 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
17a00 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
17a10 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
17a20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
17a30 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
17a40 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ) );.    serial_
17a50 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
17a60 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
17a70 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
17a80 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
17a90 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
17aa0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
17ab0 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  f( serial_type==
17ac0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
17ad0 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f  Values with MEM_
17ae0 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72  Null and MEM_Zer
17af0 6f 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79  o are created by
17b00 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c   xColumn virtual
17b10 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
17b20 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e  e methods that n
17b30 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69  ever invoke sqli
17b40 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78  te3_result_xxxxx
17b50 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20  () while.       
17b60 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e   ** computing an
17b70 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75   unchanging colu
17b80 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55  mn value in an U
17b90 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
17ba0 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65  .        ** Give
17bb0 20 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73   such values a s
17bc0 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d  pecial internal-
17bd0 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d  use-only serial-
17be0 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20  type of 10.     
17bf0 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68     ** so that th
17c00 65 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64  ey can be passed
17c10 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64   through to xUpd
17c20 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20  ate and have.   
17c30 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73       ** a true s
17c40 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63  qlite3_value_noc
17c50 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20  hange(). */.    
17c60 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17c70 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48  >p5==OPFLAG_NOCH
17c80 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52  NG_MAGIC || CORR
17c90 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
17ca0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
17cb0 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  10;.      }else 
17cc0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
17cd0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
17ce0 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
17cf0 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
17d00 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
17d10 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
17d20 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
17d30 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
17d40 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
17d50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17d60 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
17d70 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
17d80 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
17d90 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
17da0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
17db0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
17dc0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
17dd0 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
17de0 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
17df0 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63  _type);.    pRec
17e00 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
17e10 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70  _type;.    if( p
17e20 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72  Rec==pData0 ) br
17e30 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b  eak;.    pRec--;
17e40 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20  .  }while(1);.. 
17e50 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
17e60 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
17e70 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
17e80 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
17e90 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
17ea0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
17eb0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
17ec0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
17ed0 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
17ee0 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
17ef0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
17f00 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
17f10 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
17f20 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
17f30 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
17f40 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
17f50 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
17f60 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
17f70 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
17f80 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
17f90 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
17fa0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
17fb0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
17fc0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
17fd0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
17fe0 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
17ff0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
18000 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
18010 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
18020 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
18030 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
18040 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
18050 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
18060 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
18070 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  e the output reg
18080 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66  ister has a buff
18090 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20  er large enough 
180a0 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74  to store .  ** t
180b0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54  he new record. T
180c0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
180d0 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20  er (pOp->p3) is 
180e0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20  not allowed to. 
180f0 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68   ** be one of th
18100 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
18110 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66  s (because the f
18120 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f  ollowing call to
18130 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
18140 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
18150 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ze() could clobb
18160 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
18170 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
18180 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 42 79 74  .  */.  if( nByt
18190 65 2b 6e 5a 65 72 6f 3c 3d 70 4f 75 74 2d 3e 73  e+nZero<=pOut->s
181a0 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 2f  zMalloc ){.    /
181b0 2a 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  * The output reg
181c0 69 73 74 65 72 20 69 73 20 61 6c 72 65 61 64 79  ister is already
181d0 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
181e0 20 68 6f 6c 64 20 74 68 65 20 72 65 63 6f 72 64   hold the record
181f0 2e 0a 20 20 20 20 2a 2a 20 4e 6f 20 65 72 72 6f  ..    ** No erro
18200 72 20 63 68 65 63 6b 73 20 6f 72 20 62 75 66 66  r checks or buff
18210 65 72 20 65 6e 6c 61 72 67 65 6d 65 6e 74 20 69  er enlargement i
18220 73 20 72 65 71 75 69 72 65 64 20 2a 2f 0a 20 20  s required */.  
18230 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 75 74    pOut->z = pOut
18240 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 65 6c  ->zMalloc;.  }el
18250 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 65 64 20  se{.    /* Need 
18260 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
18270 74 20 74 68 65 20 6f 75 74 70 75 74 20 69 73 20  t the output is 
18280 6e 6f 74 20 74 6f 6f 20 62 69 67 20 61 6e 64 20  not too big and 
18290 74 68 65 6e 20 65 6e 6c 61 72 67 65 0a 20 20 20  then enlarge.   
182a0 20 2a 2a 20 74 68 65 20 6f 75 74 70 75 74 20 72   ** the output r
182b0 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20  egister to hold 
182c0 74 68 65 20 66 75 6c 6c 20 72 65 73 75 6c 74 20  the full result 
182d0 2a 2f 0a 20 20 20 20 69 66 28 20 6e 42 79 74 65  */.    if( nByte
182e0 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69  +nZero>db->aLimi
182f0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
18300 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
18310 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
18320 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
18330 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
18340 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28  ndResize(pOut, (
18350 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20  int)nByte) ){.  
18360 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
18370 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 4e 65  .    }.  }.  zNe
18380 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
18390 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
183a0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
183b0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
183c0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
183d0 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48   nHdr);.  j = nH
183e0 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  dr;.  assert( pD
183f0 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
18400 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
18410 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c    do{.    serial
18420 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54  _type = pRec->uT
18430 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44  emp;.    /* EVID
18440 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39  ENCE-OF: R-06529
18450 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67  -47362 Following
18460 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
18470 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   are one or more
18480 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e  .    ** addition
18490 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20  al varints, one 
184a0 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  per column. */. 
184b0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
184c0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
184d0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
184e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
184f0 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
18500 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
18510 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38  F: R-64536-51728
18520 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20   The values for 
18530 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
18540 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a  he record.    **
18550 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
18560 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20  low the header. 
18570 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69  */.    j += sqli
18580 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
18590 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c  (&zNewRecord[j],
185a0 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79   pRec, serial_ty
185b0 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20  pe); /* content 
185c0 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b  */.  }while( (++
185d0 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a  pRec)<=pLast );.
185e0 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64    assert( i==nHd
185f0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a  r );.  assert( j
18600 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73  ==nByte );..  as
18610 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
18620 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
18630 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
18640 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
18650 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
18660 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
18670 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20  MEM_Blob;.  if( 
18680 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
18690 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
186a0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
186b0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
186c0 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f  .  }.  REGISTER_
186d0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
186e0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
186f0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
18700 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
18710 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
18720 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
18730 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
18740 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
18750 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
18760 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
18770 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
18780 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
18790 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
187a0 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
187b0 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
187c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
187d0 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
187e0 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
187f0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
18800 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
18810 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
18820 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
18830 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
18840 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
18850 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
18860 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
18870 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72  >p1]->uc.pCursor
18880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
18890 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20  r );.  nEntry = 
188a0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
188b0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
188c0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
188d0 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
188e0 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
188f0 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
18900 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
18910 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18920 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  ror;.  pOut = ou
18930 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
18940 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
18950 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
18960 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
18970 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
18980 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
18990 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
189a0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
189b0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
189c0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
189d0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
189e0 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
189f0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
18a00 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
18a10 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
18a20 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
18a30 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
18a40 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
18a50 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
18a60 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
18a70 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
18a80 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
18a90 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
18ac0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
18ad0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18af0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
18b00 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
18b10 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
18b20 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
18b30 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
18b40 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
18b50 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
18b60 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
18b70 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
18b80 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
18b90 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
18ba0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
18bb0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
18bc0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
18bd0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
18be0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
18bf0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
18c00 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
18c10 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
18c20 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
18c30 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
18c40 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
18c50 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
18c60 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
18c70 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
18c80 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
18c90 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
18ca0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
18cb0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
18cc0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
18cd0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
18ce0 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
18cf0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
18d00 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
18d10 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
18d20 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
18d30 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
18d40 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
18d50 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
18d60 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
18d70 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
18d80 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
18d90 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
18da0 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
18db0 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
18dc0 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
18dd0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
18de0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
18df0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
18e00 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  p, "cannot open 
18e10 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
18e20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
18e30 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
18e40 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18e50 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
18e60 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
18e70 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
18e80 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
18e90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18ea0 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
18eb0 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
18ec0 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
18ed0 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
18ee0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
18ef0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
18f00 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
18f10 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
18f20 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
18f30 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
18f40 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
18f50 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
18f60 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18f70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
18f80 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
18f90 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
18fa0 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
18fb0 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
18fc0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
18fd0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
18fe0 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
18ff0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19000 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
19010 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
19020 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
19050 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
19060 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
19070 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
19080 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19090 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
190a0 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
190b0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
190c0 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
190d0 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
190e0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
190f0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
19100 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
19110 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
19120 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
19130 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
19140 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
19150 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
19160 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
19170 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
19180 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
19190 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
191a0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
191b0 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
191c0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
191d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
191e0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
191f0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
19200 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
19210 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
19220 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
19230 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
19240 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
19250 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
19260 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
19270 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
19280 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
19290 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
192a0 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
192b0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
192c0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
192d0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
192e0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
192f0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
19300 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
19310 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
19320 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
19330 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
19340 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
19350 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
19360 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
19370 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
19380 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
19390 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
193a0 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
193b0 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
193c0 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
193d0 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
193e0 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
193f0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
19400 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
19410 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
19420 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
19430 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
19440 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
19450 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
19460 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
19470 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
19480 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
19490 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
194a0 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
194b0 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
194c0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
194d0 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
194e0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
194f0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f  VdbeError(p, "no
19500 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
19510 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
19520 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19530 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
19540 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
19550 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  ite>0 && p1==SAV
19560 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
19570 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
19580 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
19590 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
195a0 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
195b0 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
195c0 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
195d0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
195e0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
195f0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
19600 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
19610 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20   savepoint - ". 
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19630 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74           "SQL st
19640 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
19650 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
19660 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
19670 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
19680 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
19690 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
196a0 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
196b0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
196c0 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
196d0 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
196e0 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
196f0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
19700 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
19710 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
19720 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
19730 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
19740 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
19750 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
19760 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
19770 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
19780 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
19790 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
197a0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
197b0 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
197c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
197d0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
197e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
197f0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
19800 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
19810 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
19820 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
19830 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
19840 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
19850 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
19860 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
19870 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
19880 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
19890 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
198a0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
198b0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
198c0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
198d0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
198e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
198f0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
19900 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
19910 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
19920 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
19930 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68         int isSch
19940 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  emaChange;.     
19950 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
19960 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
19970 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
19980 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
19990 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
199a0 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
199b0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
199c0 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20  = (db->mDbFlags 
199d0 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  & DBFLAG_SchemaC
199e0 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20 20  hange)!=0;.     
199f0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
19a00 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
19a10 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  {.            rc
19a20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54   = sqlite3BtreeT
19a30 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
19a40 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20  ->aDb[ii].pBt,. 
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f        SQLITE_ABO
19a80 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20  RT_ROLLBACK,.   
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
19ac0 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ge==0);.        
19ad0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19ae0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
19af0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19b00 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
19b10 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
19b20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
19b30 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  ange = 0;.      
19b40 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
19b50 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
19b60 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
19b70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19b80 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
19b90 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
19ba0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
19bb0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
19bc0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19bd0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
19be0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19bf0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
19c00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19c10 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68    if( isSchemaCh
19c20 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ange ){.        
19c30 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
19c40 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
19c50 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20  s(db, 0);.      
19c60 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
19c70 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
19c80 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20  ection(db);.    
19c90 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61        db->mDbFla
19ca0 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68  gs |= DBFLAG_Sch
19cb0 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  emaChange;.     
19cc0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
19cd0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
19ce0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
19cf0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
19d00 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
19d10 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
19d20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
19d30 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
19d40 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
19d50 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
19d60 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
19d70 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
19d80 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
19d90 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
19da0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
19db0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
19dc0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
19dd0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
19de0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
19df0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
19e00 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
19e10 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
19e20 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
19e30 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
19e40 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
19e50 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
19e60 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
19e70 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
19e80 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
19e90 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
19ea0 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
19eb0 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
19ec0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
19ed0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
19ee0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
19ef0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
19f00 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
19f10 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
19f20 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
19f30 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19f40 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
19f50 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
19f60 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
19f70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
19f80 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
19f90 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
19fa0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
19fb0 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
19fc0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
19fd0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
19fe0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
19ff0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
1a000 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a010 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
1a020 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
1a030 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
1a040 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
1a050 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
1a060 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
1a070 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
1a080 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
1a090 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
1a0a0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
1a0b0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
1a0c0 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
1a0d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
1a0e0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
1a0f0 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
1a100 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1a110 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1a120 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a130 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1a140 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
1a150 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a160 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62  e_to_error;..  b
1a170 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a180 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
1a190 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1a1a0 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
1a1b0 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
1a1c0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
1a1d0 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
1a1e0 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
1a1f0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
1a200 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
1a210 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
1a220 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
1a230 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
1a240 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
1a250 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
1a260 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
1a270 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
1a280 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
1a290 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
1a2a0 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
1a2b0 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
1a2c0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1a2d0 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
1a2e0 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
1a2f0 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
1a300 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
1a310 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
1a320 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20  nt iRollback;.. 
1a330 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1a340 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
1a350 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
1a360 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64  >p2;.  assert( d
1a370 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1a380 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
1a390 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
1a3a0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
1a3b0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
1a3c0 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
1a3d0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e  .  assert( db->n
1a3e0 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20  VdbeActive>0 ); 
1a3f0 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
1a400 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
1a410 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  ve */.  assert( 
1a420 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1a430 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75  .  if( desiredAu
1a440 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
1a450 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
1a460 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
1a470 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
1a480 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1a490 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
1a4a0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
1a4b0 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
1a4c0 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
1a4d0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1a4e0 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
1a4f0 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
1a500 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64  ommit && db->nVd
1a510 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
1a520 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
1a530 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
1a540 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
1a550 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
1a560 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  writing.      **
1a570 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
1a580 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
1a590 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
1a5a0 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
1a5b0 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  st. .      */.  
1a5c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
1a5d0 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
1a5e0 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
1a5f0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  on - ".         
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
1a620 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
1a630 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1a640 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
1a650 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a660 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
1a670 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
1a680 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
1a690 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
1a6a0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
1a6b0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
1a6c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
1a6d0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
1a6e0 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
1a6f0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  it;.    }.    if
1a700 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
1a710 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
1a720 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
1a730 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
1a740 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Op);.      db->a
1a750 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
1a760 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
1a770 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  mmit);.      p->
1a780 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
1a790 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
1a7a0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1a7b0 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
1a7c0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
1a7d0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
1a7e0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
1a7f0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
1a800 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
1a810 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1a820 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
1a830 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
1a840 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
1a850 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
1a860 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
1a870 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
1a880 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
1a890 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
1a8a0 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
1a8b0 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
1a8c0 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
1a8d0 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
1a8e0 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
1a8f0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
1a900 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
1a910 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
1a940 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
1a950 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
1a960 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
1a970 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
1a980 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a990 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1a9a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a9b0 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
1a9c0 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
1a9d0 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61  P5.**.** Begin a
1a9e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1a9f0 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61  database P1 if a
1aa00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1aa10 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61  not already.** a
1aa20 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20  ctive..** If P2 
1aa30 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
1aa40 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
1aa50 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
1aa60 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65  , or if a .** re
1aa70 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
1aa80 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
1aa90 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64  , it is upgraded
1aaa0 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e   to a write-tran
1aab0 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50  saction..** If P
1aac0 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
1aad0 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  a read-transacti
1aae0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a  on is started..*
1aaf0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
1ab00 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
1ab10 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
1ab20 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
1ab30 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
1ab40 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
1ab50 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1ab60 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
1ab70 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
1ab80 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
1ab90 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
1aba0 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
1abb0 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
1abc0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1abd0 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ses..**.** If a 
1abe0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
1abf0 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
1ac00 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
1ac10 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
1ac20 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
1ac30 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
1ac40 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
1ac50 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
1ac60 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
1ac70 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1ac80 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
1ac90 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1aca0 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
1acb0 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
1acc0 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
1acd0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1ace0 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
1acf0 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
1ad00 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
1ad10 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
1ad20 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
1ad30 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
1ad40 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
1ad50 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
1ad60 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1ad70 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
1ad80 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
1ad90 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
1ada0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
1adb0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
1adc0 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
1add0 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
1ade0 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
1adf0 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
1ae00 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
1ae10 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
1ae20 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
1ae30 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
1ae40 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
1ae50 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
1ae60 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
1ae70 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  en this opcode a
1ae80 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73  lso checks the s
1ae90 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61  chema cookie aga
1aea0 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74  inst P3.** and t
1aeb0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
1aec0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61  tion counter aga
1aed0 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20  inst P4..** The 
1aee0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
1aef0 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
1af00 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
1af10 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
1af20 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1af30 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
1af40 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
1af50 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
1af60 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
1af70 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
1af80 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
1af90 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  ead the schema. 
1afa0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a   If the schema.*
1afb0 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64  * cookie in P3 d
1afc0 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
1afd0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e  schema cookie in
1afe0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
1aff0 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68  ader or.** if th
1b000 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
1b010 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50  ion counter in P
1b020 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  4 differs from t
1b030 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65  he current.** ge
1b040 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1b050 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45  , then an SQLITE
1b060 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73  _SCHEMA error is
1b070 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63   raised and exec
1b080 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20  ution.** halts. 
1b090 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   The sqlite3_ste
1b0a0 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63  p() wrapper func
1b0b0 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20  tion might then 
1b0c0 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a  reprepare the.**
1b0d0 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
1b0e0 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65  erun it from the
1b0f0 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63   beginning..*/.c
1b100 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
1b110 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
1b120 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 20  Bt;.  int iMeta 
1b130 3d 20 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  = 0;..  assert( 
1b140 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1b150 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1b160 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
1b170 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
1b180 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1b190 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
1b1a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1b1b0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1b1c0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
1b1d0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
1b1e0 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20  2 && (db->flags 
1b1f0 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  & SQLITE_QueryOn
1b200 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  ly)!=0 ){.    rc
1b210 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e   = SQLITE_READON
1b220 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  LY;.    goto abo
1b230 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b240 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d  .  }.  pBt = db-
1b250 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
1b260 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b  t;..  if( pBt ){
1b270 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1b280 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
1b290 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  (pBt, pOp->p2, &
1b2a0 69 4d 65 74 61 29 3b 0a 20 20 20 20 74 65 73 74  iMeta);.    test
1b2b0 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1b2c0 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29  _BUSY_SNAPSHOT )
1b2d0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1b2e0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1b2f0 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20  RECOVERY );.    
1b300 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1b310 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  K ){.      if( (
1b320 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
1b330 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
1b340 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1b350 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1b360 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20     p->rc = rc;. 
1b370 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
1b380 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
1b390 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1b3a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b3b0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
1b3c0 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
1b3d0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
1b3e0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
1b3f0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
1b400 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
1b410 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
1b420 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
1b430 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
1b440 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
1b450 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
1b460 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
1b470 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
1b480 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
1b490 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
1b4a0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
1b4b0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
1b4c0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
1b4d0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
1b4e0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
1b4f0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
1b500 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
1b510 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
1b520 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
1b530 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
1b540 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1b550 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1b560 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b570 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
1b580 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
1b590 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1b5a0 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
1b5b0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
1b5c0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1b5d0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
1b5e0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
1b5f0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
1b600 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1b610 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
1b620 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
1b630 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
1b640 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
1b650 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
1b660 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
1b670 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1b680 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1b690 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1b6a0 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
1b6b0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1b6c0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
1b6d0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1b6e0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1b6f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1b700 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  32 );.  if( pOp-
1b710 3e 70 35 0a 20 20 20 26 26 20 28 69 4d 65 74 61  >p5.   && (iMeta
1b720 21 3d 70 4f 70 2d 3e 70 33 0a 20 20 20 20 20 20  !=pOp->p3.      
1b730 7c 7c 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  || db->aDb[pOp->
1b740 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
1b750 6e 65 72 61 74 69 6f 6e 21 3d 70 4f 70 2d 3e 70  neration!=pOp->p
1b760 34 2e 69 29 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  4.i).  ){.    /*
1b770 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  .    ** IMPLEMEN
1b780 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31  TATION-OF: R-031
1b790 38 39 2d 35 31 31 33 35 20 41 73 20 65 61 63 68  89-51135 As each
1b7a0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72   SQL statement r
1b7b0 75 6e 73 2c 20 74 68 65 20 73 63 68 65 6d 61 0a  uns, the schema.
1b7c0 20 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20 69      ** version i
1b7d0 73 20 63 68 65 63 6b 65 64 20 74 6f 20 65 6e 73  s checked to ens
1b7e0 75 72 65 20 74 68 61 74 20 74 68 65 20 73 63 68  ure that the sch
1b7f0 65 6d 61 20 68 61 73 20 6e 6f 74 20 63 68 61 6e  ema has not chan
1b800 67 65 64 20 73 69 6e 63 65 20 74 68 65 0a 20 20  ged since the.  
1b810 20 20 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65    ** SQL stateme
1b820 6e 74 20 77 61 73 20 70 72 65 70 61 72 65 64 2e  nt was prepared.
1b830 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
1b840 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
1b850 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
1b860 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
1b870 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
1b880 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
1b890 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
1b8a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
1b8b0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
1b8c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1b8d0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
1b8e0 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
1b8f0 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
1b900 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
1b910 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
1b920 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
1b930 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
1b940 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
1b950 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
1b960 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
1b970 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
1b980 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
1b990 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
1b9a0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
1b9b0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
1b9c0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
1b9d0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
1b9e0 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
1b9f0 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
1ba00 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
1ba10 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
1ba20 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
1ba30 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
1ba40 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
1ba50 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
1ba60 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
1ba70 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
1ba80 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
1ba90 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
1baa0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
1bab0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
1bac0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
1bad0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
1bae0 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
1baf0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
1bb00 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
1bb10 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
1bb20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
1bb30 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
1bb40 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
1bb50 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
1bb60 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
1bb70 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
1bb80 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
1bb90 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
1bba0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
1bbb0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
1bbc0 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
1bbd0 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
1bbe0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65  ;.    }.    p->e
1bbf0 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
1bc00 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
1bc10 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  MA;.  }.  if( rc
1bc20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1bc30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1bc40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1bc50 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
1bc60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1bc70 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
1bc80 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
1bc90 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
1bca0 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
1bcb0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
1bcc0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
1bcd0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
1bce0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
1bcf0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
1bd00 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
1bd10 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
1bd20 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1bd30 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
1bd40 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1bd50 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
1bd60 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1bd70 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
1bd80 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
1bd90 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
1bda0 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
1bdb0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
1bdc0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
1bdd0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
1bde0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
1bdf0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
1be00 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
1be10 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
1be20 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
1be30 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1be40 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1be60 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
1be70 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
1be80 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
1be90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1bea0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44  IsReader );.  iD
1beb0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
1bec0 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
1bed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bee0 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
1bef0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
1bf00 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1bf10 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1bf20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
1bf30 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  iDb].pBt!=0 );. 
1bf40 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1bf50 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1bf60 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c  , iDb) );..  sql
1bf70 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1bf80 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
1bf90 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
1bfa0 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
1bfb0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
1bfc0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
1bfd0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
1bfe0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1bff0 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
1c000 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1c010 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
1c020 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
1c030 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
1c040 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
1c050 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20  se P1..** P2==1 
1c060 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
1c070 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73  rsion.  P2==2 is
1c080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
1c090 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69  rmat..** P2==3 i
1c0a0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
1c0b0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
1c0c0 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
1c0d0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
1c0e0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1c0f0 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
1c100 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
1c110 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1c120 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
1c130 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
1c140 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
1c150 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
1c160 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
1c170 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
1c180 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
1c190 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  : {.  Db *pDb;..
1c1a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
1c1b0 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
1c1c0 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70   0);.  assert( p
1c1d0 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p2<SQLITE_N_
1c1e0 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
1c1f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1c200 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
1c210 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1c220 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1c230 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
1c240 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
1c250 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1c260 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1c270 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
1c280 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
1c290 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
1c2a0 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1c2b0 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70  utexHeld(db, pOp
1c2c0 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a  ->p1, 0) );.  /*
1c2d0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
1c2e0 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
1c2f0 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
1c300 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
1c310 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
1c320 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
1c330 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  p2, pOp->p3);.  
1c340 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1c350 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1c360 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
1c370 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1c380 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
1c390 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
1c3a0 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
1c3b0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1c3c0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1c3d0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64  = pOp->p3;.    d
1c3e0 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44  b->mDbFlags |= D
1c3f0 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
1c400 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ge;.  }else if( 
1c410 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
1c420 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
1c430 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
1c440 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
1c450 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
1c460 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1c470 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70  _format = pOp->p
1c480 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  3;.  }.  if( pOp
1c490 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
1c4a0 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
1c4b0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1c4c0 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
1c4d0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
1c4e0 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
1c4f0 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
1c500 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
1c510 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1c520 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1c530 62 2c 20 30 29 3b 0a 20 20 20 20 70 2d 3e 65 78  b, 0);.    p->ex
1c540 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
1c550 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1c560 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c570 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1c580 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
1c590 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
1c5a0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1c5b0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1c5c0 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
1c5d0 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
1c5e0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1c5f0 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
1c600 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
1c610 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
1c620 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
1c630 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
1c640 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
1c650 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
1c660 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
1c670 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
1c680 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
1c690 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1c6a0 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
1c6b0 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
1c6c0 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
1c6d0 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
1c6e0 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
1c6f0 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
1c700 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
1c710 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
1c720 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
1c730 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
1c740 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
1c750 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
1c760 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
1c770 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
1c780 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  ative..**.** All
1c790 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a  owed P5 bits:.**
1c7a0 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c   <ul>.** <li>  <
1c7b0 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45  b>0x02 OPFLAG_SE
1c7c0 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63  EKEQ</b>: This c
1c7d0 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20  ursor will only 
1c7e0 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20  be used for.**  
1c7f0 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f       equality lo
1c800 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74  okups (implement
1c810 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20  ed as a pair of 
1c820 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47  opcodes OP_SeekG
1c830 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20  E/OP_IdxGT.**   
1c840 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45      of OP_SeekLE
1c850 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f  /OP_IdxGT).** </
1c860 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ul>.**.** The P4
1c870 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1c880 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1c890 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1c8a0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1c8b0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1c8c0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1c8d0 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1c8e0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1c8f0 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e  .** object, then
1c900 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1c910 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b  ned must be an [
1c920 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68  index b-tree] wh
1c930 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e  ere the.** KeyIn
1c940 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  fo object define
1c950 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1c960 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1c970 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74  sequence of that
1c980 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f   index b-tree. O
1c990 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1c9a0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1c9b0 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  * value, then th
1c9c0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1c9d0 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b  ened must be a [
1c9e0 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69  table b-tree] wi
1c9f0 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  th a.** number o
1ca00 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73  f columns no les
1ca10 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65  s than the value
1ca20 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65   of P4..**.** Se
1ca30 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74  e also: OpenWrit
1ca40 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a  e, ReopenIdx.*/.
1ca50 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65  /* Opcode: Reope
1ca60 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34  nIdx P1 P2 P3 P4
1ca70 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1ca80 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1ca90 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1caa0 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  Idx opcode works
1cab0 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61   like OP_OpenRea
1cac0 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  d except that it
1cad0 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73   first.** checks
1cae0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63   to see if the c
1caf0 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61  ursor on P1 is a
1cb00 6c 72 65 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74  lready open on t
1cb10 68 65 20 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65  he same.** b-tre
1cb20 65 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74  e and if it is t
1cb30 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d  his opcode becom
1cb40 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20  es a no-op.  In 
1cb50 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20  other words,.** 
1cb60 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  if the cursor is
1cb70 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64   already open, d
1cb80 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e  o not reopen it.
1cb90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1cba0 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20  nIdx opcode may 
1cbb0 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74  only be used wit
1cbc0 68 20 50 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f  h P5==0 or P5==O
1cbd0 50 46 4c 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20  PFLAG_SEEKEQ.** 
1cbe0 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e  and with P4 bein
1cbf0 67 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f  g a P4_KEYINFO o
1cc00 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d  bject.  Furtherm
1cc10 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75  ore, the P3 valu
1cc20 65 20 6d 75 73 74 0a 2a 2a 20 62 65 20 74 68 65  e must.** be the
1cc30 20 73 61 6d 65 20 61 73 20 65 76 65 72 79 20 6f   same as every o
1cc40 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f  ther ReopenIdx o
1cc50 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74  r OpenRead for t
1cc60 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a  he same cursor.*
1cc70 2a 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  * number..**.** 
1cc80 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a  Allowed P5 bits:
1cc90 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
1cca0 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47    <b>0x02 OPFLAG
1ccb0 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69  _SEEKEQ</b>: Thi
1ccc0 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e  s cursor will on
1ccd0 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a  ly be used for.*
1cce0 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79  *       equality
1ccf0 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d   lookups (implem
1cd00 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20  ented as a pair 
1cd10 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65  of opcodes OP_Se
1cd20 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a  ekGE/OP_IdxGT.**
1cd30 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65         of OP_See
1cd40 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a  kLE/OP_IdxGT).**
1cd50 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65   </ul>.**.** See
1cd60 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65   also: OP_OpenRe
1cd70 61 64 2c 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ad, OP_OpenWrite
1cd80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1cd90 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
1cda0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1cdb0 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1cdc0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1cdd0 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1cde0 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1cdf0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1ce00 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1ce10 70 61 67 65 20 69 73 20 50 32 20 28 6f 72 20 77  page is P2 (or w
1ce20 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1ce30 73 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  s held in regist
1ce40 65 72 20 50 32 20 69 66 20 74 68 65 0a 2a 2a 20  er P2 if the.** 
1ce50 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 62  OPFLAG_P2ISREG b
1ce60 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  it is set in P5 
1ce70 2d 20 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a  - see below)..**
1ce80 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1ce90 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1cea0 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1ceb0 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1cec0 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1ced0 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1cee0 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1cef0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1cf00 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62  a KeyInfo .** ob
1cf10 6a 65 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65  ject, then table
1cf20 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75   being opened mu
1cf30 73 74 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20  st be an [index 
1cf40 62 2d 74 72 65 65 5d 20 77 68 65 72 65 20 74 68  b-tree] where th
1cf50 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  e.** KeyInfo obj
1cf60 65 63 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  ect defines the 
1cf70 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1cf80 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1cf90 63 65 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78  ce of that index
1cfa0 20 62 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69   b-tree. Otherwi
1cfb0 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1cfc0 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1cfd0 65 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  e, then the tabl
1cfe0 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d  e being opened m
1cff0 75 73 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20  ust be a [table 
1d000 62 2d 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a  b-tree] with a.*
1d010 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * number of colu
1d020 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e  mns no less than
1d030 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34   the value of P4
1d040 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ..**.** Allowed 
1d050 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e  P5 bits:.** <ul>
1d060 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30  .** <li>  <b>0x0
1d070 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c  2 OPFLAG_SEEKEQ<
1d080 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72  /b>: This cursor
1d090 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73   will only be us
1d0a0 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20  ed for.**       
1d0b0 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73  equality lookups
1d0c0 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73   (implemented as
1d0d0 20 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64   a pair of opcod
1d0e0 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f  es OP_SeekGE/OP_
1d0f0 49 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f  IdxGT.**       o
1d100 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49  f OP_SeekLE/OP_I
1d110 64 78 47 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c  dxGT).** <li>  <
1d120 62 3e 30 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f  b>0x08 OPFLAG_FO
1d130 52 44 45 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69  RDELETE</b>: Thi
1d140 73 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  s cursor is used
1d150 20 6f 6e 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a   only to seek.**
1d160 20 20 20 20 20 20 20 61 6e 64 20 73 75 62 73 65         and subse
1d170 71 75 65 6e 74 6c 79 20 64 65 6c 65 74 65 20 65  quently delete e
1d180 6e 74 72 69 65 73 20 69 6e 20 61 6e 20 69 6e 64  ntries in an ind
1d190 65 78 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ex btree.  This 
1d1a0 69 73 20 61 0a 2a 2a 20 20 20 20 20 20 20 68 69  is a.**       hi
1d1b0 6e 74 20 74 6f 20 74 68 65 20 73 74 6f 72 61 67  nt to the storag
1d1c0 65 20 65 6e 67 69 6e 65 20 74 68 61 74 20 74 68  e engine that th
1d1d0 65 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65  e storage engine
1d1e0 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a   is allowed to.*
1d1f0 2a 20 20 20 20 20 20 20 69 67 6e 6f 72 65 2e 20  *       ignore. 
1d200 20 54 68 65 20 68 69 6e 74 20 69 73 20 6e 6f 74   The hint is not
1d210 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 66 66   used by the off
1d220 69 63 69 61 6c 20 53 51 4c 69 74 65 20 62 2a 74  icial SQLite b*t
1d230 72 65 65 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20  ree storage.**  
1d240 20 20 20 20 20 65 6e 67 69 6e 65 2c 20 62 75 74       engine, but
1d250 20 69 73 20 75 73 65 64 20 62 79 20 43 4f 4d 44   is used by COMD
1d260 42 32 2e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  B2..** <li>  <b>
1d270 30 78 31 30 20 4f 50 46 4c 41 47 5f 50 32 49 53  0x10 OPFLAG_P2IS
1d280 52 45 47 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65  REG</b>: Use the
1d290 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1d2a0 73 74 65 72 20 50 32 0a 2a 2a 20 20 20 20 20 20  ster P2.**      
1d2b0 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
1d2c0 65 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  e, not the value
1d2d0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
1d2e0 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68  * </ul>.**.** Th
1d2f0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1d300 6f 72 6b 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65  orks like OpenRe
1d310 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1d320 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1d330 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1d340 69 74 65 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ite mode..**.** 
1d350 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65  See also: OP_Ope
1d360 6e 52 65 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e  nRead, OP_Reopen
1d370 49 64 78 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  Idx.*/.case OP_R
1d380 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e  eopenIdx: {.  in
1d390 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49  t nField;.  KeyI
1d3a0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
1d3b0 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69   int p2;.  int i
1d3c0 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  Db;.  int wrFlag
1d3d0 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
1d3e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
1d3f0 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  r;.  Db *pDb;.. 
1d400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1d410 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1d420 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1d430 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d440 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1d450 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70  FO );.  pCur = p
1d460 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d470 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20  ;.  if( pCur && 
1d480 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d  pCur->pgnoRoot==
1d490 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a  (u32)pOp->p2 ){.
1d4a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72      assert( pCur
1d4b0 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29  ->iDb==pOp->p3 )
1d4c0 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e  ;      /* Guaran
1d4d0 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65  teed by the code
1d4e0 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1d4f0 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73    goto open_curs
1d500 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20  or_set_hints;.  
1d510 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  }.  /* If the cu
1d520 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72  rsor is not curr
1d530 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73  ently open or is
1d540 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65   open on a diffe
1d550 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c  rent.  ** index,
1d560 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
1d570 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52  gh into OP_OpenR
1d580 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72  ead to force a r
1d590 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50  eopen */.case OP
1d5a0 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
1d5b0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20  OP_OpenWrite:.. 
1d5c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1d5d0 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1d5e0 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30  te || pOp->p5==0
1d5f0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1d600 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1d610 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1d620 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1d630 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1d640 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f  P_OpenRead || pO
1d650 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65  p->opcode==OP_Re
1d660 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20  openIdx.        
1d670 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79    || p->readOnly
1d680 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d  ==0 );..  if( p-
1d690 3e 65 78 70 69 72 65 64 3d 3d 31 20 29 7b 0a 20  >expired==1 ){. 
1d6a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1d6b0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20  BORT_ROLLBACK;. 
1d6c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1d6d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
1d6e0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1d6f0 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1d700 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1d710 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1d720 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1d730 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1d740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1d750 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1d760 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1d770 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1d780 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1d790 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1d7a0 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1d7b0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1d7c0 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1d7d0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46  assert( OPFLAG_F
1d7e0 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  ORDELETE==BTREE_
1d7f0 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20  FORDELETE );.   
1d800 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f   wrFlag = BTREE_
1d810 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35  WRCSR | (pOp->p5
1d820 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c   & OPFLAG_FORDEL
1d830 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ETE);.    assert
1d840 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1d850 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
1d860 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
1d870 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1d880 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
1d890 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1d8a0 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
1d8b0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1d8c0 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
1d8d0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
1d8e0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1d8f0 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
1d900 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1d910 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1d920 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1d930 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
1d940 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  t( p2<=(p->nMem+
1d950 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
1d960 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1d970 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1d980 70 65 6e 57 72 69 74 65 20 29 3b 0a 20 20 20 20  penWrite );.    
1d990 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
1d9a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
1d9b0 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
1d9c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1d9d0 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
1d9e0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
1d9f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1da00 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
1da10 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
1da20 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
1da30 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
1da40 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
1da50 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
1da60 42 74 72 65 65 20 6f 70 63 6f 64 65 20 61 6e 64  Btree opcode and
1da70 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
1da80 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1da90 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
1daa0 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
1dab0 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
1dac0 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
1dad0 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
1dae0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1daf0 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
1db00 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
1db10 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
1db20 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
1db30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1db40 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =2 );.  }.  if( 
1db50 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1db60 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1db70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1db80 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1db90 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1dba0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1dbb0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1dbc0 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1dbd0 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
1dbe0 4b 65 79 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65  KeyInfo->nAllFie
1dbf0 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1dc00 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1dc10 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1dc20 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1dc30 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1dc40 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1dc50 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1dc60 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1dc70 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1dc80 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1dc90 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1dca0 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1dcb0 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1dcc0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1dcd0 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1dce0 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52  iDb, CURTYPE_BTR
1dcf0 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d  EE);.  if( pCur=
1dd00 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1dd10 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1dd20 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1dd30 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1dd40 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1dd50 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   p2;.#ifdef SQLI
1dd60 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d  TE_DEBUG.  pCur-
1dd70 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67  >wrFlag = wrFlag
1dd80 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  ;.#endif.  rc = 
1dd90 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1dda0 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1ddb0 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1ddc0 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  r->uc.pCursor);.
1ddd0 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1dde0 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1ddf0 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1de00 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1de10 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1de20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1de30 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1de40 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1de50 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1de60 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1de70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1de80 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1de90 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1dea0 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1deb0 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1dec0 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1ded0 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1dee0 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1def0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1df00 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1df10 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
1df20 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
1df30 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
1df40 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
1df50 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
1df60 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
1df70 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
1df80 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1df90 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1dfa0 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64  _BULKCSR );.#ifd
1dfb0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1dfc0 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20  _CURSOR_HINTS.  
1dfd0 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1dfe0 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  2 & OPFLAG_SEEKE
1dff0 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  Q );.#endif.  sq
1e000 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1e010 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e  HintFlags(pCur->
1e020 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20  uc.pCursor,.    
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e040 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1e050 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1e060 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1e070 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63  KEQ)));.  if( rc
1e080 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1e090 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1e0a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1e0b0 65 3a 20 4f 70 65 6e 44 75 70 20 50 31 20 50 32  e: OpenDup P1 P2
1e0c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65   * * *.**.** Ope
1e0d0 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1e0e0 31 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  1 that points to
1e0f0 20 74 68 65 20 73 61 6d 65 20 65 70 68 65 6d 65   the same epheme
1e100 72 61 6c 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20  ral table as.** 
1e110 63 75 72 73 6f 72 20 50 32 2e 20 20 54 68 65 20  cursor P2.  The 
1e120 50 32 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  P2 cursor must h
1e130 61 76 65 20 62 65 65 6e 20 6f 70 65 6e 65 64 20  ave been opened 
1e140 62 79 20 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70  by a prior OP_Op
1e150 65 6e 45 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f  enEphemeral.** o
1e160 70 63 6f 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68  pcode.  Only eph
1e170 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 6d  emeral cursors m
1e180 61 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 64  ay be duplicated
1e190 2e 0a 2a 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74  ..**.** Duplicat
1e1a0 65 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  e ephemeral curs
1e1b0 6f 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ors are used for
1e1c0 20 73 65 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d   self-joins of m
1e1d0 61 74 65 72 69 61 6c 69 7a 65 64 20 76 69 65 77  aterialized view
1e1e0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
1e1f0 65 6e 44 75 70 3a 20 7b 0a 20 20 56 64 62 65 43  enDup: {.  VdbeC
1e200 75 72 73 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20  ursor *pOrig;   
1e210 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
1e220 20 63 75 72 73 6f 72 20 74 6f 20 62 65 20 64 75   cursor to be du
1e230 70 6c 69 63 61 74 65 64 20 2a 2f 0a 20 20 56 64  plicated */.  Vd
1e240 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 20 20  beCursor *pCx;  
1e250 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 63      /* The new c
1e260 75 72 73 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69  ursor */..  pOri
1e270 67 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  g = p->apCsr[pOp
1e280 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
1e290 20 70 4f 72 69 67 2d 3e 70 42 74 78 21 3d 30 20   pOrig->pBtx!=0 
1e2a0 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65  );  /* Only ephe
1e2b0 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 63 61  meral cursors ca
1e2c0 6e 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20  n be duplicated 
1e2d0 2a 2f 0a 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f  */..  pCx = allo
1e2e0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1e2f0 70 2d 3e 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46  p->p1, pOrig->nF
1e300 69 65 6c 64 2c 20 2d 31 2c 20 43 55 52 54 59 50  ield, -1, CURTYP
1e310 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1e320 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1e330 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1e340 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1e350 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1e360 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1e370 6f 20 3d 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49  o = pOrig->pKeyI
1e380 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  nfo;.  pCx->isTa
1e390 62 6c 65 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54  ble = pOrig->isT
1e3a0 61 62 6c 65 3b 0a 20 20 70 43 78 2d 3e 70 67 6e  able;.  pCx->pgn
1e3b0 6f 52 6f 6f 74 20 3d 20 70 4f 72 69 67 2d 3e 70  oRoot = pOrig->p
1e3c0 67 6e 6f 52 6f 6f 74 3b 0a 20 20 72 63 20 3d 20  gnoRoot;.  rc = 
1e3d0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1e3e0 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c 20  or(pOrig->pBtx, 
1e3f0 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42  pCx->pgnoRoot, B
1e400 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e420 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1e430 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75  nfo, pCx->uc.pCu
1e440 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20  rsor);.  /* The 
1e450 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1e460 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e  or() routine can
1e470 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74   only fail for t
1e480 68 65 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a  he first cursor.
1e490 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20    ** opened for 
1e4a0 61 20 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e  a database.  Sin
1e4b0 63 65 20 74 68 65 72 65 20 69 73 20 61 6c 72 65  ce there is alre
1e4c0 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73  ady an open curs
1e4d0 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a  or when this.  *
1e4e0 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c  * opcode is run,
1e4f0 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72 65   the sqlite3Btre
1e500 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74  eCursor() cannot
1e510 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72   fail */.  asser
1e520 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1e530 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1e540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1e550 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1e560 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1e570 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1e580 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1e590 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1e5a0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1e5b0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1e5c0 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1e5d0 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1e5e0 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1e5f0 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1e600 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1e610 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1e620 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1e630 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1e640 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1e650 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
1e660 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6c 72  cursor P1 is alr
1e670 65 61 64 79 20 6f 70 65 6e 65 64 20 6f 6e 20 61  eady opened on a
1e680 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
1e690 65 2c 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  e, the table.** 
1e6a0 69 73 20 63 6c 65 61 72 65 64 20 28 61 6c 6c 20  is cleared (all 
1e6b0 63 6f 6e 74 65 6e 74 20 69 73 20 65 72 61 73 65  content is erase
1e6c0 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  d)..**.** P2 is 
1e6d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1e6e0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1e6f0 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1e700 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1e710 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1e720 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1e730 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1e740 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1e750 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1e760 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1e770 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1e780 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1e790 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1e7a0 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1e7b0 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1e7c0 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1e7d0 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1e7e0 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1e7f0 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1e800 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1e810 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1e820 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1e830 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1e840 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1e850 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1e860 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1e870 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1e880 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1e890 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1e8a0 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1e8b0 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1e8c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1e8d0 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1e8e0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1e8f0 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1e900 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1e910 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1e920 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1e930 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1e940 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1e950 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1e960 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1e970 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1e980 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1e990 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1e9a0 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1e9b0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1e9c0 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1e9d0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1e9e0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1e9f0 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1ea00 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1ea10 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1ea20 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1ea30 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1ea40 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1ea50 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1ea60 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1ea70 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1ea80 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1ea90 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1eaa0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1eab0 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1eac0 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1ead0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1eae0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1eaf0 20 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61   );.  pCx = p->a
1eb00 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1eb10 20 69 66 28 20 70 43 78 20 29 7b 0a 20 20 20 20   if( pCx ){.    
1eb20 2f 2a 20 49 66 20 74 68 65 20 65 70 68 65 72 6d  /* If the epherm
1eb30 65 72 61 6c 20 74 61 62 6c 65 20 69 73 20 61 6c  eral table is al
1eb40 72 65 61 64 79 20 6f 70 65 6e 2c 20 65 72 61 73  ready open, eras
1eb50 65 20 61 6c 6c 20 65 78 69 73 74 69 6e 67 20 63  e all existing c
1eb60 6f 6e 74 65 6e 74 0a 20 20 20 20 2a 2a 20 73 6f  ontent.    ** so
1eb70 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 20   that the table 
1eb80 69 73 20 65 6d 70 74 79 20 61 67 61 69 6e 2c 20  is empty again, 
1eb90 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  rather than crea
1eba0 74 69 6e 67 20 61 20 6e 65 77 20 74 61 62 6c 65  ting a new table
1ebb0 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
1ebc0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
1ebd0 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20  able(pCx->pBtx, 
1ebe0 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30  pCx->pgnoRoot, 0
1ebf0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
1ec00 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1ec10 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1ec20 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55   pOp->p2, -1, CU
1ec30 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1ec40 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1ec50 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1ec60 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1ec70 3b 0a 20 20 20 20 70 43 78 2d 3e 69 73 45 70 68  ;.    pCx->isEph
1ec80 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 20 20  emeral = 1;.    
1ec90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1eca0 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1ecb0 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1ecc0 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  x, .            
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
1ece0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1ecf0 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
1ed00 7c 20 70 4f 70 2d 3e 70 35 2c 0a 20 20 20 20 20  | pOp->p5,.     
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 20 20 76 66 73 46 6c 61 67 73 29 3b 0a       vfsFlags);.
1ed30 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1ed40 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
1ed50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ed60 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
1ed70 70 42 74 78 2c 20 31 2c 20 30 29 3b 0a 20 20 20  pBtx, 1, 0);.   
1ed80 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53   }.    if( rc==S
1ed90 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1eda0 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1edb0 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1edc0 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1edd0 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1ede0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1edf0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1ee00 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1ee10 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1ee20 65 0a 20 20 20 20 20 20 2a 2a 20 6f 70 65 6e 69  e.      ** openi
1ee30 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e  ng it. If a tran
1ee40 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72  sient table is r
1ee50 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73  equired, just us
1ee60 65 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 61  e the.      ** a
1ee70 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1ee80 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
1ee90 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
1eea0 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c  BLOB_INTKEY tabl
1eeb0 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  e)..      */.   
1eec0 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65     if( (pCx->pKe
1eed0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1eee0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1eef0 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1ef00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ef10 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1ef20 46 4f 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  FO );.        rc
1ef30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ef40 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1ef50 70 42 74 78 2c 20 28 69 6e 74 2a 29 26 70 43 78  pBtx, (int*)&pCx
1ef60 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20  ->pgnoRoot,.    
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
1efa0 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
1efb0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1efc0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1efd0 20 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e     assert( pCx->
1efe0 70 67 6e 6f 52 6f 6f 74 3d 3d 4d 41 53 54 45 52  pgnoRoot==MASTER
1eff0 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
1f000 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1f010 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1f020 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1f030 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1f040 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1f050 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1f060 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1f070 43 78 2d 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70  Cx->pBtx, pCx->p
1f080 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45 5f 57  gnoRoot, BTREE_W
1f090 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f          pKeyInfo
1f0c0 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
1f0d0 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  r);.        }.  
1f0e0 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1f0f0 6c 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  le = 0;.      }e
1f100 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 78  lse{.        pCx
1f110 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53  ->pgnoRoot = MAS
1f120 54 45 52 5f 52 4f 4f 54 3b 0a 20 20 20 20 20 20  TER_ROOT;.      
1f130 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f140 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1f150 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  Btx, MASTER_ROOT
1f160 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
1f190 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
1f1a0 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  r);.        pCx-
1f1b0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1f1c0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1f1d0 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1f1e0 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
1f1f0 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 7d  _UNORDERED);.  }
1f200 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1f210 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f220 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1f230 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1f240 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  erOpen P1 P2 P3 
1f250 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1f260 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b  opcode works lik
1f270 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1f280 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69  al except that i
1f290 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61  t opens.** a tra
1f2a0 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61  nsient index tha
1f2b0 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c  t is specificall
1f2c0 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f  y designed to so
1f2d0 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c  rt large.** tabl
1f2e0 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65  es using an exte
1f2f0 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20  rnal merge-sort 
1f300 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a  algorithm..**.**
1f310 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20   If argument P3 
1f320 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
1f330 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74  n it indicates t
1f340 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d  hat the sorter m
1f350 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61  ay.** assume tha
1f360 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20  t a stable sort 
1f370 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20  considering the 
1f380 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20  first P3 fields 
1f390 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69  of each.** key i
1f3a0 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20  s sufficient to 
1f3b0 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75  produce the requ
1f3c0 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f  ired results..*/
1f3d0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1f3e0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1f3f0 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1f400 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f410 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1f420 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1f430 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1f440 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1f450 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
1f460 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66  PE_SORTER);.  if
1f470 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1f480 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1f490 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1f4a0 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1f4b0 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1f4c0 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1f4d0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1f4e0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1f4f0 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1f500 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1f510 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1f520 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63  , pCx);.  if( rc
1f530 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1f540 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1f550 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1f560 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1f570 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1f580 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1f590 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1f5a0 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1f5b0 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1f5c0 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1f5d0 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1f5e0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1f5f0 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1f600 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1f610 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1f620 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1f630 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1f640 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1f650 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1f660 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1f670 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f680 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f690 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f6a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f6b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1f6c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1f6d0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
1f6e0 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65  );.  if( (pC->se
1f6f0 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a  qCount++)==0 ){.
1f700 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
1f710 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
1f720 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1f730 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1f740 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1f750 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
1f760 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
1f770 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1f780 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1f790 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1f7a0 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1f7b0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1f7c0 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1f7d0 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1f7e0 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
1f7f0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1f800 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
1f810 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1f820 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1f830 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1f840 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1f850 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1f860 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1f870 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1f880 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1f890 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1f8a0 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1f8b0 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1f8c0 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1f8d0 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1f8e0 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1f8f0 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1f900 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1f910 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1f920 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1f930 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1f940 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1f950 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1f960 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1f970 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1f980 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1f990 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1f9a0 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1f9b0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1f9c0 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1f9d0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1f9e0 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1f9f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1fa00 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1fa10 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1fa20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
1fa30 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1fa40 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1fa50 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1fa60 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45   -1, CURTYPE_PSE
1fa70 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  UDO);.  if( pCx=
1fa80 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1fa90 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1faa0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65   = 1;.  pCx->see
1fab0 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70  kResult = pOp->p
1fac0 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
1fad0 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65  e = 1;.  /* Give
1fae0 20 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75 72   this pseudo-cur
1faf0 73 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75 72  sor a fake BtCur
1fb00 73 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20 74  sor pointer so t
1fb10 68 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e  hat pCx.  ** can
1fb20 20 62 65 20 73 61 66 65 6c 79 20 70 61 73 73 65   be safely passe
1fb30 64 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  d to sqlite3Vdbe
1fb40 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20  CursorMoveto(). 
1fb50 20 54 68 69 73 20 61 76 6f 69 64 73 20 61 20 74   This avoids a t
1fb60 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78  est.  ** for pCx
1fb70 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1fb80 59 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64 65  YPE_BTREE inside
1fb90 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43   of sqlite3VdbeC
1fba0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20  ursorMoveto().  
1fbb0 2a 2a 20 77 68 69 63 68 20 69 73 20 61 20 70 65  ** which is a pe
1fbc0 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69  rformance optimi
1fbd0 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d  zation */.  pCx-
1fbe0 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73 71  >uc.pCursor = sq
1fbf0 6c 69 74 65 33 42 74 72 65 65 46 61 6b 65 56 61  lite3BtreeFakeVa
1fc00 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20 61  lidCursor();.  a
1fc10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1fc20 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1fc30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1fc40 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1fc50 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1fc60 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1fc70 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1fc80 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1fc90 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1fca0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1fcb0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1fcc0 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1fcd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1fce0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1fcf0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1fd00 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1fd10 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1fd20 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1fd30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1fd40 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
1fd50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1fd60 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1fd70 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
1fd80 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
1fd90 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1fda0 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
1fdb0 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
1fdc0 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
1fdd0 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
1fde0 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1fdf0 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
1fe00 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
1fe10 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
1fe20 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
1fe30 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
1fe40 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
1fe50 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
1fe60 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
1fe70 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
1fe80 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
1fe90 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
1fea0 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
1feb0 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
1fec0 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
1fed0 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
1fee0 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
1fef0 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
1ff00 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
1ff10 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
1ff20 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
1ff30 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
1ff40 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
1ff50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ff60 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1ff70 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1ff80 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
1ff90 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ffa0 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  E );.  pC->maskU
1ffb0 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
1ffc0 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
1ffd0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1ffe0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1fff0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20000 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20010 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20020 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
20030 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
20040 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
20050 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
20060 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
20070 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
20080 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
20090 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
200a0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
200b0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
200c0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
200d0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
200e0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
200f0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
20100 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
20110 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
20120 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
20130 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
20140 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
20150 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
20160 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
20170 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
20180 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
20190 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
201a0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
201b0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
201c0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
201d0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
201e0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
201f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
20200 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
20210 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
20220 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
20230 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
20240 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
20250 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
20260 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
20270 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
20280 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
20290 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
202a0 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
202b0 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
202c0 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
202d0 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
202e0 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c  lowed by an IdxL
202f0 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
20300 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
20310 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f  ..** The IdxLE o
20320 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
20330 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
20340 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
20350 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20  ut the.** IdxLE 
20360 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
20370 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
20380 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
20390 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
203a0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
203b0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
203c0 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
203d0 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
203e0 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
203f0 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
20400 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
20410 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
20420 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
20430 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
20440 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
20450 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
20460 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
20470 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
20480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
20490 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GT P1 P2 P3 P4 *
204a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
204b0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
204c0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
204d0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
204e0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
204f0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
20500 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
20510 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
20520 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
20530 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
20540 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
20550 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
20560 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
20570 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
20580 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
20590 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
205a0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
205b0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
205c0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
205d0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
205e0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
205f0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
20600 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
20610 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
20620 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
20630 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
20640 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
20650 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
20660 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
20670 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
20680 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
20690 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
206a0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
206b0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
206c0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
206d0 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
206e0 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
206f0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
20700 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
20710 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
20720 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
20730 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
20740 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
20750 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
20760 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
20770 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20  e: SeekLT P1 P2 
20780 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
20790 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
207a0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
207b0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
207c0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
207d0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
207e0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
207f0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
20800 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
20810 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
20820 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
20830 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
20840 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
20850 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
20860 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
20870 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
20880 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
20890 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
208a0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
208b0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
208c0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
208d0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
208e0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
208f0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
20900 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
20910 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
20920 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
20930 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
20940 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
20950 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
20960 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
20970 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
20980 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
20990 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
209a0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
209b0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
209c0 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
209d0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
209e0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
209f0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
20a00 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
20a10 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
20a20 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
20a30 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
20a40 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
20a50 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32  de: SeekLE P1 P2
20a60 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
20a70 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
20a80 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
20a90 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
20aa0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
20ab0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
20ac0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
20ad0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
20ae0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
20af0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
20b00 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
20b10 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
20b20 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
20b30 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
20b40 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
20b50 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
20b60 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
20b70 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
20b80 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
20b90 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
20ba0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
20bb0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
20bc0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
20bd0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
20be0 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
20bf0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
20c00 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
20c10 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
20c20 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
20c30 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
20c40 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
20c50 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
20c60 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
20c70 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
20c80 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
20c90 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
20ca0 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
20cb0 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
20cc0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20cd0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
20ce0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
20cf0 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
20d00 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ext..**.** If th
20d10 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
20d20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
20d30 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
20d40 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
20d50 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
20d60 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
20d70 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
20d80 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
20d90 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
20da0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20db0 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
20dc0 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
20dd0 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
20de0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
20df0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
20e00 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxGE opcode with
20e10 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
20e20 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47  nts..** The IdxG
20e30 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
20e40 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
20e50 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
20e60 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
20e70 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
20e80 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
20e90 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
20ea0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ions..**.** See 
20eb0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
20ec0 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
20ed0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
20ee0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
20ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
20f00 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a  , in3, group */.
20f10 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
20f20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
20f30 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63   in3, group */.c
20f40 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
20f50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
20f60 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61  in3, group */.ca
20f70 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20  se OP_SeekGT: { 
20f80 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
20f90 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 20 20 69  n3, group */.  i
20fa0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
20fb0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
20fc0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20  result */.  int 
20fd0 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
20fe0 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64  * Opcode */.  Vd
20ff0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
21000 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74   /* The cursor t
21010 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61  o seek */.  Unpa
21020 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f  ckedRecord r;  /
21030 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65  * The key to see
21040 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  k for */.  int n
21050 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
21060 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
21070 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20  ns or fields in 
21080 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  the key */.  i64
21090 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20   iKey;          
210a0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
210b0 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
210c0 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20  /.  int eqOnly; 
210d0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69         /* Only i
210e0 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20  nterested in == 
210f0 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73  results */..  as
21100 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21110 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21120 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
21130 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
21140 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21150 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21160 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21170 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
21180 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
21190 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
211a0 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
211b0 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
211c0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
211d0 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
211e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
211f0 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
21200 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
21210 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
21220 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
21230 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
21240 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
21250 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79  opcode;.  eqOnly
21260 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c   = 0;.  pC->null
21270 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  Row = 0;.#ifdef 
21280 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
21290 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
212a0 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
212b0 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
212c0 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
212d0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66   BTREE_SEEK_EQ f
212e0 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  lag is only set 
212f0 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73  on index cursors
21300 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
21310 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
21320 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
21330 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
21340 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20  SEEK_EQ)==0.    
21350 20 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52            || COR
21360 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20  RUPT_DB );..    
21370 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
21380 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
21390 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
213a0 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
213b0 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
213c0 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
213d0 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
213e0 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
213f0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
21400 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
21410 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20  convert it. */. 
21420 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
21430 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66  pOp->p3];.    if
21440 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
21450 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
21460 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
21470 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
21480 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
21490 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
214a0 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
214b0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
214c0 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
214d0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
214e0 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
214f0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
21500 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
21510 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
21520 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
21530 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
21540 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
21550 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
21560 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
21570 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
21580 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
21590 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
215a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
215b0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
215c0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
215d0 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
215e0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
215f0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
21600 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
21610 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
21620 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
21630 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21640 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75  en(1,2); goto ju
21650 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
21660 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
21670 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
21680 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
21690 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
216a0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
216b0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
216c0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
216d0 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
216e0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
216f0 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
21700 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
21710 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
21720 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
21730 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
21740 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
21750 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
21760 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
21770 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
21780 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
21790 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
217a0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
217b0 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
217c0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
217d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
217e0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
217f0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
21800 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
21810 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
21820 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
21830 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
21840 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
21850 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
21860 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
21870 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
21880 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
21890 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
218a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
218b0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
218c0 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
218d0 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
218e0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
218f0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
21900 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
21910 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
21920 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
21930 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
21940 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
21950 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
21960 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
21970 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
21980 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
21990 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
219a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
219b0 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
219c0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
219d0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
219e0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
219f0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
21a00 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
21a10 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
21a20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  } .    rc = sqli
21a30 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
21a40 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
21a50 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69  ursor, 0, (u64)i
21a60 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
21a70 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
21a80 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
21a90 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
21aa0 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21  e */.    if( rc!
21ab0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
21ac0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
21ad0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
21ae0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
21af0 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20  /* For a cursor 
21b00 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53  with the BTREE_S
21b10 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c  EEK_EQ hint, onl
21b20 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20  y the OP_SeekGE 
21b30 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65  and.    ** OP_Se
21b40 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65  ekLE opcodes are
21b50 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68   allowed, and th
21b60 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65  ese must be imme
21b70 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64  diately followed
21b80 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50  .    ** by an OP
21b90 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78  _IdxGT or OP_Idx
21ba0 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65  LT opcode, respe
21bb0 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68  ctively, with th
21bc0 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20  e same key..    
21bd0 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  */.    if( sqlit
21be0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
21bf0 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
21c00 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
21c10 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f  EQ) ){.      eqO
21c20 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  nly = 1;.      a
21c30 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
21c40 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  de==OP_SeekGE ||
21c50 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21c60 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20  _SeekLE );.     
21c70 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
21c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
21c90 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
21ca0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
21cb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21cc0 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p1==pOp[0].p
21cd0 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  1 );.      asser
21ce0 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f  t( pOp[1].p2==pO
21cf0 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20  p[0].p2 );.     
21d00 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
21d10 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b  p3==pOp[0].p3 );
21d20 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
21d30 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b  Op[1].p4.i==pOp[
21d40 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d  0].p4.i );.    }
21d50 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ..    nField = p
21d60 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
21d70 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
21d80 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
21d90 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
21da0 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
21db0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
21dc0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
21dd0 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
21de0 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
21df0 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
21e00 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
21e10 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
21e20 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
21e30 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
21e40 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
21e50 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
21e60 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
21e70 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
21e80 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
21e90 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
21ea0 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
21eb0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
21ec0 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
21ed0 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
21ee0 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
21ef0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
21f00 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
21f10 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
21f20 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
21f30 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
21f40 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
21f50 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
21f60 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
21f70 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
21f80 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
21f90 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
21fa0 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
21fb0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
21fc0 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
21fd0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
21fe0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
21ff0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
22000 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
22010 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
22020 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
22030 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a    r.eqSeen = 0;.
22040 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22050 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
22060 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
22070 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
22080 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
22090 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
220a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
220b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
220c0 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c   }.    if( eqOnl
220d0 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30  y && r.eqSeen==0
220e0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
220f0 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20  ( res!=0 );.    
22100 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f    goto seek_not_
22110 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  found;.    }.  }
22120 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
22130 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
22140 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22150 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
22160 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
22170 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
22180 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
22190 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
221a0 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGE ){  assert( 
221b0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc==OP_SeekGE ||
221c0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29   oc==OP_SeekGT )
221d0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20  ;.    if( res<0 
221e0 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
221f0 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a  ==OP_SeekGT) ){.
22200 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
22210 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
22220 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75  3BtreeNext(pC->u
22230 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  c.pCursor, 0);. 
22240 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
22250 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22260 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22270 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20  _DONE ){.       
22280 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
22290 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  K;.          res
222a0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
222b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67  lse{.          g
222c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
222d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
222e0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  }.      }.    }e
222f0 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  lse{.      res =
22300 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   0;.    }.  }els
22310 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  e{.    assert( o
22320 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c==OP_SeekLT || 
22330 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  oc==OP_SeekLE );
22340 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c  .    if( res>0 |
22350 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
22360 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20  =OP_SeekLT) ){. 
22370 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
22380 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22390 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
223a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29  ->uc.pCursor, 0)
223b0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
223c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
223d0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
223e0 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
223f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22400 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  E_OK;.          
22410 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
22420 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
22430 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22440 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22450 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
22460 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
22470 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
22480 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
22490 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
224a0 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
224b0 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69     ** see if thi
224c0 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20  s is the case.. 
224d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65       */.      re
224e0 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
224f0 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Eof(pC->uc.pCurs
22500 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73  or);.    }.  }.s
22510 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20  eek_not_found:. 
22520 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
22530 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  >0 );.  VdbeBran
22540 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
22550 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a  );.  if( res ){.
22560 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
22570 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  _p2;.  }else if(
22580 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61   eqOnly ){.    a
22590 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
225a0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
225b0 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
225c0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
225d0 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20   pOp++; /* Skip 
225e0 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20  the OP_IdxLt or 
225f0 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f  OP_IdxGT that fo
22600 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62  llows */.  }.  b
22610 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22620 64 65 3a 20 53 65 65 6b 48 69 74 20 50 31 20 50  de: SeekHit P1 P
22630 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
22640 73 69 73 3a 20 73 65 65 6b 48 69 74 3d 50 32 0a  sis: seekHit=P2.
22650 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 65  **.** Set the se
22660 65 6b 48 69 74 20 66 6c 61 67 20 6f 6e 20 63 75  ekHit flag on cu
22670 72 73 6f 72 20 50 31 20 74 6f 20 74 68 65 20 76  rsor P1 to the v
22680 61 6c 75 65 20 69 6e 20 50 32 2e 0a 2a 2a 20 54  alue in P2..** T
22690 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20  he seekHit flag 
226a0 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 49  is used by the I
226b0 66 4e 6f 48 6f 70 65 20 6f 70 63 6f 64 65 2e 0a  fNoHope opcode..
226c0 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 62 65  **.** P1 must be
226d0 20 61 20 76 61 6c 69 64 20 62 2d 74 72 65 65 20   a valid b-tree 
226e0 63 75 72 73 6f 72 2e 20 20 50 32 20 6d 75 73 74  cursor.  P2 must
226f0 20 62 65 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   be a boolean va
22700 6c 75 65 2c 0a 2a 2a 20 65 69 74 68 65 72 20 30  lue,.** either 0
22710 20 6f 72 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f   or 1..*/.case O
22720 50 5f 53 65 65 6b 48 69 74 3a 20 7b 0a 20 20 56  P_SeekHit: {.  V
22730 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
22740 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22750 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22760 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
22770 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22780 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22790 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
227a0 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 7c  rt( pOp->p2==0 |
227b0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 29 3b 0a  | pOp->p2==1 );.
227c0 20 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 3d 20    pC->seekHit = 
227d0 70 4f 70 2d 3e 70 32 20 26 20 31 3b 0a 20 20 62  pOp->p2 & 1;.  b
227e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
227f0 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
22800 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
22810 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
22820 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
22830 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
22840 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
22850 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
22860 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
22870 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
22880 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
22890 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
228a0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
228b0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
228c0 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f  ord..**.** Curso
228d0 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
228e0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
228f0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
22900 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
22910 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78  4.** is a prefix
22920 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
22930 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
22940 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e  is made to P2 an
22950 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20  d.** P1 is left 
22960 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
22970 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
22980 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
22990 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
229a0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
229b0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62  e where it can b
229c0 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
229d0 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72   the forward dir
229e0 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78  ection.  The Nex
229f0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
22a00 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20  ll work,.** but 
22a10 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73  not the Prev ins
22a20 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
22a30 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
22a40 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
22a50 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
22a60 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
22a70 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
22a80 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
22a90 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
22aa0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
22ab0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
22ac0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
22ad0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
22ae0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
22af0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
22b00 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
22b10 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
22b20 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
22b30 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
22b40 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
22b50 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
22b60 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
22b70 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
22b80 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
22b90 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
22ba0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
22bb0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
22bc0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
22bd0 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
22be0 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
22bf0 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
22c00 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
22c10 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
22c20 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
22c30 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
22c40 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
22c50 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
22c60 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
22c70 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
22c80 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
22c90 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
22ca0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
22cb0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
22cc0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
22cd0 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
22ce0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
22cf0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
22d00 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
22d10 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
22d20 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
22d30 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
22d40 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22d50 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f   NotExists, NoCo
22d60 6e 66 6c 69 63 74 2c 20 49 66 4e 6f 48 6f 70 65  nflict, IfNoHope
22d70 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
22d80 66 4e 6f 48 6f 70 65 20 50 31 20 50 32 20 50 33  fNoHope P1 P2 P3
22d90 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
22da0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
22db0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
22dc0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
22dd0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
22de0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
22df0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
22e00 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
22e10 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
22e20 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 73 65  tree.  If the se
22e30 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20 73 65  ekHit flag is se
22e40 74 20 6f 6e 20 50 31 2c 20 74 68 65 6e 0a 2a 2a  t on P1, then.**
22e50 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
22e60 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 20 69 66  a no-op.  But if
22e70 20 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61   the seekHit fla
22e80 67 20 6f 66 20 50 31 20 69 73 20 63 6c 65 61 72  g of P1 is clear
22e90 2c 20 74 68 65 6e 0a 2a 2a 20 63 68 65 63 6b 20  , then.** check 
22ea0 74 6f 20 73 65 65 20 69 66 20 74 68 65 72 65 20  to see if there 
22eb0 69 73 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  is any entry in 
22ec0 50 31 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  P1 that matches 
22ed0 74 68 65 0a 2a 2a 20 70 72 65 66 69 78 20 69 64  the.** prefix id
22ee0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
22ef0 6e 64 20 50 34 2e 20 20 49 66 20 6e 6f 20 65 6e  nd P4.  If no en
22f00 74 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  try matches the 
22f10 70 72 65 66 69 78 2c 0a 2a 2a 20 6a 75 6d 70 20  prefix,.** jump 
22f20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
22f30 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  e fall through..
22f40 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
22f50 65 20 62 65 68 61 76 65 73 20 6c 69 6b 65 20 4f  e behaves like O
22f60 50 5f 4e 6f 74 46 6f 75 6e 64 20 69 66 20 74 68  P_NotFound if th
22f70 65 20 73 65 65 6b 48 69 74 0a 2a 2a 20 66 6c 61  e seekHit.** fla
22f80 67 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 69  g is clear and i
22f90 74 20 62 65 68 61 76 65 73 20 6c 69 6b 65 20 4f  t behaves like O
22fa0 50 5f 4e 6f 6f 70 20 69 66 20 74 68 65 20 73 65  P_Noop if the se
22fb0 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20 73 65  ekHit flag is se
22fc0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  t..**.** This op
22fd0 63 6f 64 65 20 69 73 20 75 73 65 64 20 69 6e 20  code is used in 
22fe0 49 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  IN clause proces
22ff0 73 69 6e 67 20 66 6f 72 20 61 20 6d 75 6c 74 69  sing for a multi
23000 2d 63 6f 6c 75 6d 6e 20 6b 65 79 2e 0a 2a 2a 20  -column key..** 
23010 49 66 20 61 6e 20 49 4e 20 63 6c 61 75 73 65 20  If an IN clause 
23020 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  is attached to a
23030 6e 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  n element of the
23040 20 6b 65 79 20 6f 74 68 65 72 20 74 68 61 6e 20   key other than 
23050 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 6d 6f 73 74  the.** left-most
23060 20 65 6c 65 6d 65 6e 74 2c 20 61 6e 64 20 69 66   element, and if
23070 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
23080 74 63 68 65 73 20 6f 6e 20 74 68 65 20 6d 6f 73  tches on the mos
23090 74 20 72 65 63 65 6e 74 0a 2a 2a 20 73 65 65 6b  t recent.** seek
230a0 20 6f 76 65 72 20 74 68 65 20 77 68 6f 6c 65 20   over the whole 
230b0 6b 65 79 2c 20 74 68 65 6e 20 69 74 20 6d 69 67  key, then it mig
230c0 68 74 20 62 65 20 74 68 61 74 20 6f 6e 65 20 6f  ht be that one o
230d0 66 20 74 68 65 20 6b 65 79 20 65 6c 65 6d 65 6e  f the key elemen
230e0 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6c 65 66 74  t.** to the left
230f0 20 69 73 20 70 72 6f 68 69 62 69 74 69 6e 67 20   is prohibiting 
23100 61 20 6d 61 74 63 68 2c 20 61 6e 64 20 68 65 6e  a match, and hen
23110 63 65 20 74 68 65 72 65 20 69 73 20 22 6e 6f 20  ce there is "no 
23120 68 6f 70 65 22 20 6f 66 0a 2a 2a 20 61 6e 79 20  hope" of.** any 
23130 6d 61 74 63 68 20 72 65 67 61 72 64 6c 65 73 73  match regardless
23140 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20 49 4e 20   of how many IN 
23150 63 6c 61 75 73 65 20 65 6c 65 6d 65 6e 74 73 20  clause elements 
23160 61 72 65 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 20  are checked..** 
23170 49 6e 20 73 75 63 68 20 61 20 63 61 73 65 2c 20  In such a case, 
23180 77 65 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 49  we abandon the I
23190 4e 20 63 6c 61 75 73 65 20 73 65 61 72 63 68 20  N clause search 
231a0 65 61 72 6c 79 2c 20 75 73 69 6e 67 20 74 68 69  early, using thi
231b0 73 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 54 68  s.** opcode.  Th
231c0 65 20 6f 70 63 6f 64 65 20 6e 61 6d 65 20 63 6f  e opcode name co
231d0 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63  mes from the fac
231e0 74 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 6a 75  t that the.** ju
231f0 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
23200 68 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65  here is "no hope
23210 22 20 6f 66 20 61 63 68 69 65 76 69 6e 67 20 61  " of achieving a
23220 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 53 65   match..**.** Se
23230 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
23240 2c 20 53 65 65 6b 48 69 74 0a 2a 2f 0a 2f 2a 20  , SeekHit.*/./* 
23250 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
23260 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
23270 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
23280 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
23290 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
232a0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
232b0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
232c0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
232d0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
232e0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
232f0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
23300 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
23310 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
23320 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
23330 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
23340 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
23350 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
23360 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
23370 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
23380 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
23390 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
233a0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
233b0 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
233c0 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
233d0 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
233e0 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
233f0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
23400 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
23410 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
23420 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
23430 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
23440 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
23450 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
23460 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
23470 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
23480 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
23490 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
234a0 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
234b0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
234c0 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
234d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
234e0 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
234f0 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
23500 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
23510 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
23520 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
23530 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
23540 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
23550 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
23560 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
23570 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
23580 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
23590 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
235a0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
235b0 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
235c0 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
235d0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
235e0 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
235f0 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
23600 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
23610 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
23620 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
23630 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
23640 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 48 6f  /.case OP_IfNoHo
23650 70 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d  pe: {     /* jum
23660 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
23670 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
23680 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23690 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
236a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
236b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
236c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
236d0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
236e0 3e 73 65 65 6b 48 69 74 20 29 20 62 72 65 61 6b  >seekHit ) break
236f0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
23700 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 46  ugh into OP_NotF
23710 6f 75 6e 64 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  ound */.}.case O
23720 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20  P_NoConflict:   
23730 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
23740 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
23750 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
23760 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
23770 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
23780 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
23790 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
237a0 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b  xists;.  int tak
237b0 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b  eJump;.  int ii;
237c0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
237d0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
237e0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
237f0 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65  pFree;.  Unpacke
23800 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
23810 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
23820 72 64 20 72 3b 0a 0a 23 69 66 64 65 66 20 53 51  rd r;..#ifdef SQ
23830 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
23840 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
23850 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
23860 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
23870 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
23880 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23890 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
238a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
238b0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
238c0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
238d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
238e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
238f0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
23900 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
23910 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
23920 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
23930 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
23940 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
23950 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
23960 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
23970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23980 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
23990 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
239a0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
239b0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
239c0 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
239d0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
239e0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
239f0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
23a00 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
23a10 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  n3;.#ifdef SQLIT
23a20 45 5f 44 45 42 55 47 0a 20 20 20 20 66 6f 72 28  E_DEBUG.    for(
23a30 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c  ii=0; ii<r.nFiel
23a40 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
23a50 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
23a60 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20  id(&r.aMem[ii]) 
23a70 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
23a80 20 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61   (r.aMem[ii].fla
23a90 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d  gs & MEM_Zero)==
23aa0 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e  0 || r.aMem[ii].
23ab0 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  n==0 );.      if
23ac0 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f  ( ii ) REGISTER_
23ad0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69  TRACE(pOp->p3+ii
23ae0 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a  , &r.aMem[ii]);.
23af0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
23b00 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20   pIdxKey = &r;. 
23b10 20 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20     pFree = 0;.  
23b20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
23b30 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
23b40 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
23b50 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
23b60 28 70 49 6e 33 29 3b 0a 20 20 20 20 61 73 73 65  (pIn3);.    asse
23b70 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
23b80 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
23b90 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20 20 69 66 28  NOMEM );.    if(
23ba0 20 72 63 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65   rc ) goto no_me
23bb0 6d 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 70  m;.    pFree = p
23bc0 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
23bd0 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
23be0 64 52 65 63 6f 72 64 28 70 43 2d 3e 70 4b 65 79  dRecord(pC->pKey
23bf0 49 6e 66 6f 29 3b 0a 20 20 20 20 69 66 28 20 70  Info);.    if( p
23c00 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
23c10 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 73 71 6c   no_mem;.    sql
23c20 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
23c30 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
23c40 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
23c50 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20  ->z, pIdxKey);. 
23c60 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65   }.  pIdxKey->de
23c70 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
23c80 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20  takeJump = 0;.  
23c90 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
23ca0 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
23cb0 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65  {.    /* For the
23cc0 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f   OP_NoConflict o
23cd0 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20  pcode, take the 
23ce0 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74  jump if any of t
23cf0 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20  he.    ** input 
23d00 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c  fields are NULL,
23d10 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77   since any key w
23d20 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20  ith a NULL will 
23d30 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c  not.    ** confl
23d40 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ict */.    for(i
23d50 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d  i=0; ii<pIdxKey-
23d60 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  >nField; ii++){.
23d70 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65        if( pIdxKe
23d80 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  y->aMem[ii].flag
23d90 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
23da0 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70          takeJump
23db0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   = 1;.        br
23dc0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
23dd0 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
23de0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
23df0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
23e00 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
23e10 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
23e20 20 69 66 28 20 70 46 72 65 65 20 29 20 73 71 6c   if( pFree ) sql
23e30 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c  ite3DbFreeNN(db,
23e40 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72   pFree);.  if( r
23e50 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
23e60 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
23e70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
23e80 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
23e90 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61  t = res;.  alrea
23ea0 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
23eb0 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  =0);.  pC->nullR
23ec0 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78  ow = 1-alreadyEx
23ed0 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  ists;.  pC->defe
23ee0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
23ef0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
23f00 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23f10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
23f20 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
23f30 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
23f40 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
23f50 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
23f60 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
23f70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
23f80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
23f90 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74  dbeBranchTaken(t
23fa0 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79  akeJump||already
23fb0 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20  Exists==0,2);.  
23fc0 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c    if( takeJump |
23fd0 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73  | !alreadyExists
23fe0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
23ff0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
24000 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
24010 65 65 6b 52 6f 77 69 64 20 50 31 20 50 32 20 50  eekRowid P1 P2 P
24020 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
24030 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
24040 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
24050 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
24060 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
24070 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
24080 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
24090 79 73 29 2e 20 20 49 66 20 72 65 67 69 73 74 65  ys).  If registe
240a0 72 20 50 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r P3 does not co
240b0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
240c0 20 6f 72 20 69 66 20 50 31 20 64 6f 65 73 20 6e   or if P1 does n
240d0 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20  ot.** contain a 
240e0 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
240f0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
24100 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
24110 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32  .  .** Or, if P2
24120 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e 20   is 0, raise an 
24130 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65  SQLITE_CORRUPT e
24140 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73  rror. If P1 does
24150 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65   contain.** a re
24160 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20  cord with rowid 
24170 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76  P3 then .** leav
24180 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69  e the cursor poi
24190 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72 65  nting at that re
241a0 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  cord and fall th
241b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
241c0 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
241d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e  ..**.** The OP_N
241e0 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 20  otExists opcode 
241f0 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
24200 65 20 6f 70 65 72 61 74 69 6f 6e 2c 20 62 75 74  e operation, but
24210 20 77 69 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73   with OP_NotExis
24220 74 73 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 67  ts.** the P3 reg
24230 69 73 74 65 72 20 6d 75 73 74 20 62 65 20 67 75  ister must be gu
24240 61 72 61 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74  aranteed to cont
24250 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ain an integer v
24260 61 6c 75 65 2e 20 20 57 69 74 68 20 74 68 69 73  alue.  With this
24270 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20 72 65 67 69  .** opcode, regi
24280 73 74 65 72 20 50 33 20 6d 69 67 68 74 20 6e 6f  ster P3 might no
24290 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
242a0 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  eger..**.** The 
242b0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f  OP_NotFound opco
242c0 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
242d0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f  same operation o
242e0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a  n index btrees.*
242f0 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72  * (with arbitrar
24300 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65  y multi-value ke
24310 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ys)..**.** This 
24320 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
24330 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
24340 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
24350 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a  not be advanced.
24360 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ** in either dir
24370 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
24380 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
24390 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64  t and Prev opcod
243a0 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77  es will.** not w
243b0 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ork following th
243c0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
243d0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
243e0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  , NotFound, NoCo
243f0 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69  nflict, SeekRowi
24400 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  d.*/./* Opcode: 
24410 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20  NotExists P1 P2 
24420 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
24430 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
24440 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
24450 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73   index of a curs
24460 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51  or open on an SQ
24470 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77  L table btree (w
24480 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b  ith integer.** k
24490 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20  eys).  P3 is an 
244a0 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20  integer rowid.  
244b0 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63  If P1 does not c
244c0 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20  ontain a record 
244d0 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33  with.** rowid P3
244e0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
244f0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f  iately to P2.  O
24500 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72  r, if P2 is 0, r
24510 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  aise an.** SQLIT
24520 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e  E_CORRUPT error.
24530 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
24540 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
24550 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
24560 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75  .** leave the cu
24570 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74  rsor pointing at
24580 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64   that record and
24590 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
245a0 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73   the next.** ins
245b0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
245c0 54 68 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64  The OP_SeekRowid
245d0 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
245e0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
245f0 69 6f 6e 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c  ion but also all
24600 6f 77 73 20 74 68 65 0a 2a 2a 20 50 33 20 72 65  ows the.** P3 re
24610 67 69 73 74 65 72 20 74 6f 20 63 6f 6e 74 61 69  gister to contai
24620 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20  n a non-integer 
24630 76 61 6c 75 65 2c 20 69 6e 20 77 68 69 63 68 20  value, in which 
24640 63 61 73 65 20 74 68 65 20 6a 75 6d 70 20 69 73  case the jump is
24650 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e  .** always taken
24660 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  .  This opcode r
24670 65 71 75 69 72 65 73 20 74 68 61 74 20 50 33 20  equires that P3 
24680 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 20 61  always contain a
24690 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
246a0 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
246b0 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
246c0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
246d0 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
246e0 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
246f0 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
24700 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
24710 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
24720 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
24730 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
24740 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61  t cannot be adva
24750 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65  nced.** in eithe
24760 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
24770 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
24780 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20  e Next and Prev 
24790 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20  opcodes will.** 
247a0 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69  not work followi
247b0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
247c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
247d0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
247e0 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65   NoConflict, See
247f0 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f  kRowid.*/.case O
24800 50 5f 53 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20  P_SeekRowid: {  
24810 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
24820 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n3 */.  VdbeCurs
24830 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
24840 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
24850 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79   res;.  u64 iKey
24860 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ;..  pIn3 = &aMe
24870 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
24880 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
24890 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
248a0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
248b0 20 70 49 6e 33 2d 3e 75 2e 69 20 63 6f 6e 74 61   pIn3->u.i conta
248c0 69 6e 73 20 61 20 76 61 6c 69 64 20 69 6e 74 65  ins a valid inte
248d0 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
248e0 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65  on of.    ** the
248f0 20 6b 65 79 20 76 61 6c 75 65 2c 20 62 75 74 20   key value, but 
24900 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
24910 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
24920 65 20 72 65 67 69 73 74 65 72 2c 20 61 73 0a 20  e register, as. 
24930 20 20 20 2a 2a 20 6f 74 68 65 72 20 70 61 72 74     ** other part
24940 73 20 6f 66 20 74 68 65 20 70 65 72 70 61 72 65  s of the perpare
24950 64 20 73 74 61 74 65 6d 65 6e 74 20 6d 69 67 68  d statement migh
24960 74 20 62 65 20 64 65 70 65 6e 64 69 6e 67 20 6f  t be depending o
24970 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 63 75 72  n the.    ** cur
24980 72 65 6e 74 20 64 61 74 61 74 79 70 65 2e 20 2a  rent datatype. *
24990 2f 0a 20 20 20 20 75 31 36 20 6f 72 69 67 46 6c  /.    u16 origFl
249a0 61 67 73 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  ags = pIn3->flag
249b0 73 3b 0a 20 20 20 20 69 6e 74 20 69 73 4e 6f 74  s;.    int isNot
249c0 49 6e 74 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  Int;.    applyAf
249d0 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c  finity(pIn3, SQL
249e0 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
249f0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
24a00 69 73 4e 6f 74 49 6e 74 20 3d 20 28 70 49 6e 33  isNotInt = (pIn3
24a10 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
24a20 74 29 3d 3d 30 3b 0a 20 20 20 20 70 49 6e 33 2d  t)==0;.    pIn3-
24a30 3e 66 6c 61 67 73 20 3d 20 6f 72 69 67 46 6c 61  >flags = origFla
24a40 67 73 3b 0a 20 20 20 20 69 66 28 20 69 73 4e 6f  gs;.    if( isNo
24a50 74 49 6e 74 20 29 20 67 6f 74 6f 20 6a 75 6d 70  tInt ) goto jump
24a60 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a  _to_p2;.  }.  /*
24a70 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
24a80 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  to OP_NotExists 
24a90 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
24aa0 69 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f  ists:          /
24ab0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
24ac0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
24ad0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
24ae0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
24af0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 7c 7c 20   MEM_Int)!=0 || 
24b00 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
24b10 53 65 65 6b 52 6f 77 69 64 20 29 3b 0a 20 20 61  SeekRowid );.  a
24b20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24b30 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24b40 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24b50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24b60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24b70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
24b80 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
24b90 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
24ba0 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 20 70 43  P_SeekRowid ) pC
24bb0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 53 65  ->seekOp = OP_Se
24bc0 65 6b 52 6f 77 69 64 3b 0a 23 65 6e 64 69 66 0a  ekRowid;.#endif.
24bd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
24be0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
24bf0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
24c00 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
24c10 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
24c20 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
24c30 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
24c40 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
24c50 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
24c60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
24c70 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
24c80 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
24c90 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61  y, 0, &res);.  a
24ca0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
24cb0 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
24cc0 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
24cd0 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
24ce0 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
24cf0 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c  te */.  pC->null
24d00 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
24d10 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24d20 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
24d30 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24d40 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
24d50 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
24d60 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
24d70 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72  t = res;.  if( r
24d80 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  es!=0 ){.    ass
24d90 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
24da0 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  OK );.    if( pO
24db0 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
24dc0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
24dd0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
24de0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74  }else{.      got
24df0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
24e00 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
24e10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24e20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
24e30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24e40 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
24e50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
24e60 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
24e70 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
24e80 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
24e90 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
24ea0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
24eb0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
24ec0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
24ed0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
24ee0 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
24ef0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
24f00 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
24f10 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
24f20 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
24f30 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
24f40 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
24f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
24f60 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
24f70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24f80 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24f90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
24fa0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
24fb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24fc0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24fd0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
24fe0 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f  YPE_VTAB );.  pO
24ff0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
25000 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
25010 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
25020 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
25030 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
25040 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
25050 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
25060 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
25070 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
25080 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
25090 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
250a0 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
250b0 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
250c0 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
250d0 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
250e0 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
250f0 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
25100 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
25110 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
25120 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
25130 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
25140 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
25150 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
25160 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
25170 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
25180 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
25190 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
251a0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
251b0 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
251c0 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
251d0 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
251e0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
251f0 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
25200 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
25210 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
25220 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
25230 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
25240 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
25250 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
25260 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
25270 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
25280 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
25290 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
252a0 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
252b0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
252c0 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
252d0 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
252e0 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
252f0 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
25300 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
25310 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
25320 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
25330 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
25340 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
25350 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
25360 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
25370 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
25380 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
25390 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
253a0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
253b0 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
253c0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
253d0 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
253e0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
253f0 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
25400 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
25410 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
25420 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
25430 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
25440 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
25450 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
25460 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
25470 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
25480 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
25490 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
254a0 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
254b0 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
254c0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ;.  res = 0;.  p
254d0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
254e0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
254f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
25500 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25510 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25520 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25530 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25540 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
25550 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
25560 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25570 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
25580 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
25590 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
255a0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20  sor!=0 );.  {.  
255b0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
255c0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
255d0 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
255e0 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
255f0 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
25600 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
25610 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
25620 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
25630 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
25640 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
25650 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
25660 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
25670 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
25680 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
25690 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
256a0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
256b0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
256c0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
256d0 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
256e0 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
256f0 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
25700 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
25710 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
25720 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
25730 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
25740 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
25750 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
25760 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
25770 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
25780 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
25790 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
257a0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
257b0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
257c0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
257d0 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
257e0 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
257f0 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
25800 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
25810 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
25820 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
25830 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
25840 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
25850 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
25860 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
25870 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
25880 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
25890 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
258a0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
258b0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
258c0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
258d0 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
258e0 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
258f0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
25900 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
25910 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
25920 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
25930 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
25940 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
25950 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
25960 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
25970 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
25980 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
25990 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
259a0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
259b0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
259c0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
259d0 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
259e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
259f0 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
25a00 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
25a10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
25a20 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
25a30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25a40 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
25a50 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
25a60 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
25a70 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
25a80 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
25a90 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
25aa0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
25ab0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
25ac0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29  C->uc.pCursor) )
25ad0 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 73 71  ;.        v = sq
25ae0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
25af0 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
25b00 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  sor);.        if
25b10 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
25b20 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
25b30 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
25b40 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
25b50 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
25b60 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
25b70 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
25b80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
25b90 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
25ba0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
25bb0 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
25bc0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
25bd0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
25be0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
25bf0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
25c00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25c10 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
25c20 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
25c30 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
25c40 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
25c50 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
25c60 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
25c70 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
25c80 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
25c90 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
25ca0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
25cb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
25cc0 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
25cd0 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
25ce0 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
25cf0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
25d00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
25d10 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
25d20 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
25d30 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
25d40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
25d50 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
25d60 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
25d70 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
25d80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
25d90 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
25da0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
25db0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
25dc0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
25dd0 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
25de0 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
25df0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
25e00 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Mem);.      sqli
25e10 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
25e20 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
25e30 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
25e40 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
25e50 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
25e60 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
25e70 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66  eger */.      if
25e80 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
25e90 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
25ea0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
25eb0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
25ec0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
25ed0 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30 36 33  MP: R-17817-0063
25ee0 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  0 */.        got
25ef0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25f00 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
25f10 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
25f20 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
25f30 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
25f40 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
25f50 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
25f60 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
25f70 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
25f80 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
25f90 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
25fa0 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
25fb0 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
25fc0 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
25fd0 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
25fe0 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
25ff0 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
26000 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
26010 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
26020 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
26030 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
26040 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
26050 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
26060 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
26070 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
26080 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
26090 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
260a0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
260b0 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
260c0 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
260d0 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
260e0 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
260f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
26110 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
26120 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
26130 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
26140 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c   do{.        sql
26150 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
26160 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
26170 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
26180 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b  X_ROWID>>1); v++
26190 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61  ;  /* Ensure tha
261a0 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74  t v is greater t
261b0 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  han zero */.    
261c0 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20    }while(  ((rc 
261d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
261e0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
261f0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
26200 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
26240 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
26250 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
26260 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
26270 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
26280 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
26290 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
262a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
262b0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
262c0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
262d0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
262e0 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
262f0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
26300 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26310 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
26320 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
26330 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
26340 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
26350 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
26360 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
26370 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26380 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26390 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
263a0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
263b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
263c0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
263d0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
263e0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
263f0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
26400 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
26410 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
26420 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
26430 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
26440 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
26450 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
26460 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
26470 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
26480 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
26490 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
264a0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
264b0 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
264c0 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
264d0 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
264e0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
264f0 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
26500 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
26510 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
26520 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
26530 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
26540 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
26550 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
26560 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
26570 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
26580 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
26590 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
265a0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
265b0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
265c0 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
265d0 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
265e0 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
265f0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
26600 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
26610 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
26620 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
26630 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
26640 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
26650 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
26660 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
26670 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66  n might.** run f
26680 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e  aster by avoidin
26690 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79  g an unnecessary
266a0 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20   seek on cursor 
266b0 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a  P1.  However,.**
266c0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
266d0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d  EEKRESULT flag m
266e0 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  ust only be set 
266f0 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65  if there have be
26700 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73  en no prior.** s
26710 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73  eeks on the curs
26720 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73  or or if the mos
26730 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73  t recent seek us
26740 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c 20 74  ed a key equal t
26750 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P3..**.** If t
26760 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
26770 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
26780 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
26790 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
267a0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
267b0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
267c0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
267d0 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
267e0 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
267f0 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
26800 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
26810 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
26820 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
26830 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
26840 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
26850 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
26860 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63  to a Table struc
26870 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20  ture, or may be 
26880 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a  NULL. If it is .
26890 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  ** not NULL, the
268a0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
268b0 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  k (sqlite3.xUpda
268c0 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
268d0 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f  nvoked .** follo
268e0 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
268f0 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
26900 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
26910 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
26920 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
26930 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
26940 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
26950 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
26960 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
26970 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
26980 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
26990 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
269a0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
269b0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
269c0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
269d0 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
269e0 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
269f0 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
26a00 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
26a10 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
26a20 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
26a30 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
26a40 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
26a50 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
26a60 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
26a70 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
26a80 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
26a90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
26aa0 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
26ab0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
26ac0 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61  : intkey=P3 data
26ad0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
26ae0 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
26af0 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
26b00 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
26b10 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
26b20 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
26b30 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
26b40 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
26b50 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26b60 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
26b70 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
26b80 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
26b90 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
26ba0 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
26bb0 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
26bc0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
26bd0 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
26be0 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
26bf0 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
26c00 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
26c10 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43  ecord */.  VdbeC
26c20 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
26c30 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
26c40 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
26c50 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
26c60 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
26c70 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
26c80 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
26c90 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
26ca0 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
26cb0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
26cc0 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
26cd0 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
26ce0 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
26cf0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
26d00 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75     /* Table stru
26d10 63 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20  cture - used by 
26d20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75  update and pre-u
26d30 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20  pdate hooks */. 
26d40 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b   BtreePayload x;
26d50 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f     /* Payload to
26d60 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
26d70 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d  .  pData = &aMem
26d80 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
26d90 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
26da0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
26db0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
26dc0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44  t( memIsValid(pD
26dd0 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ata) );.  pC = p
26de0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26df0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26e00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26e10 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
26e20 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
26e30 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
26e40 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
26e50 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
26e60 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29  & OPFLAG_ISNOOP)
26e70 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20   || pC->isTable 
26e80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26e90 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
26ea0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  LE || pOp->p4typ
26eb0 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a  e>=P4_STATIC );.
26ec0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
26ed0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
26ee0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
26ef0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
26f00 70 2c 20 70 43 29 3b 0a 0a 20 20 69 66 28 20 70  p, pC);..  if( p
26f10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
26f20 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
26f30 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
26f40 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
26f50 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
26f60 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
26f70 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
26f80 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
26f90 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
26fa0 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
26fb0 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75  x.nKey = pKey->u
26fc0 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  .i;.  }else{.   
26fd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
26fe0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49  code==OP_InsertI
26ff0 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  nt );.    x.nKey
27000 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a   = pOp->p3;.  }.
27010 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
27020 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
27030 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28  HAS_UPDATE_HOOK(
27040 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  db) ){.    asser
27050 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
27060 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
27070 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53  Db[pC->iDb].zDbS
27080 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
27090 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
270a0 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
270b0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  >p5 & OPFLAG_ISN
270c0 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69 64  OOP) || HasRowid
270d0 28 70 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c 73  (pTab) );.  }els
270e0 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  e{.    pTab = 0;
270f0 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f  .    zDb = 0;  /
27100 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
27110 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
27120 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
27130 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
27140 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
27150 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
27160 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
27170 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a  e hook, if any *
27180 2f 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a  /.  if( pTab ){.
27190 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65      if( db->xPre
271a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
271b0 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  & !(pOp->p5 & OP
271c0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 29  FLAG_ISUPDATE) )
271d0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
271e0 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b  dbePreUpdateHook
271f0 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49  (p, pC, SQLITE_I
27200 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62  NSERT, zDb, pTab
27210 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32  , x.nKey,pOp->p2
27220 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
27230 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
27240 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62 2d  back==0 || pTab-
27250 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20  >aCol==0 ){.    
27260 20 20 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f 73    /* Prevent pos
27270 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 66 72  t-update hook fr
27280 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63 61  om running in ca
27290 73 65 73 20 77 68 65 6e 20 69 74 20 73 68 6f 75  ses when it shou
272a0 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20  ld not */.      
272b0 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  pTab = 0;.    }.
272c0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
272d0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
272e0 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  P ) break;.#endi
272f0 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  f..  if( pOp->p5
27300 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
27310 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
27320 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
27330 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
27340 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
27350 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 61  id = x.nKey;.  a
27360 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
27370 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
27380 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78 2e  MEM_Str) );.  x.
27390 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a  pData = pData->z
273a0 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44  ;.  x.nData = pD
273b0 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52 65  ata->n;.  seekRe
273c0 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35  sult = ((pOp->p5
273d0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
273e0 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
273f0 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a  eekResult : 0);.
27400 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
27410 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
27420 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70  .    x.nZero = p
27430 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
27440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a   }else{.    x.nZ
27450 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78  ero = 0;.  }.  x
27460 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20  .pKey = 0;.  rc 
27470 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27480 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  sert(pC->uc.pCur
27490 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 28  sor, &x,.      (
274a0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
274b0 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f  G_APPEND|OPFLAG_
274c0 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20  SAVEPOSITION)), 
274d0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
274e0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
274f0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
27500 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
27510 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
27520 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
27530 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
27540 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
27550 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27560 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
27570 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73  ( pTab ){.    as
27580 73 65 72 74 28 20 64 62 2d 3e 78 55 70 64 61 74  sert( db->xUpdat
27590 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b 0a  eCallback!=0 );.
275a0 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
275b0 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20 20  ->aCol!=0 );.   
275c0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
275d0 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
275e0 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20  Arg,.           
275f0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
27600 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
27610 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
27620 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20 20  LITE_INSERT,.   
27630 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61          zDb, pTa
27640 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79  b->zName, x.nKey
27650 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
27660 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
27670 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34  lete P1 P2 P3 P4
27680 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P5.**.** Delete
27690 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
276a0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
276b0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
276c0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
276d0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41  If the OPFLAG_SA
276e0 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f  VEPOSITION bit o
276f0 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65 74  f the P5 paramet
27700 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a  er is set, then.
27710 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  ** the cursor wi
27720 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
27730 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20 74  ing at  either t
27740 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
27750 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
27760 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
27770 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
27780 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
27790 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
277a0 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
277b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
277c0 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73  l be a no-op. As
277d0 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68   a result, in th
277e0 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73  is case.** it is
277f0 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20   ok to delete a 
27800 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
27810 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20  in a Next loop. 
27820 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41  If .** OPFLAG_SA
27830 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f  VEPOSITION bit o
27840 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74  f P5 is clear, t
27850 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77  hen the cursor w
27860 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69  ill be.** left i
27870 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73  n an undefined s
27880 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tate..**.** If t
27890 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  he OPFLAG_AUXDEL
278a0 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  ETE bit is set o
278b0 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63  n P5, that indic
278c0 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a  ates that this.*
278d0 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20  * delete one of 
278e0 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74  several associat
278f0 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67  ed with deleting
27900 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
27910 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f   all its.** asso
27920 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74  ciated index ent
27930 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f  ries.  Exactly o
27940 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65  ne of those dele
27950 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69 6d  tes is the "prim
27960 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20  ary".** delete. 
27970 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65 20   The others are 
27980 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f  all on OPFLAG_FO
27990 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20  RDELETE cursors 
279a0 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d  or else are.** m
279b0 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20 41  arked with the A
279c0 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a  UXDELETE flag..*
279d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
279e0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
279f0 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f  of P2 (NB: P2 no
27a00 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74 68  t P5) is set, th
27a10 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68  en the row.** ch
27a20 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e  ange count is in
27a30 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
27a40 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
27a50 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
27a60 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
27a70 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
27a80 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
27a90 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
27aa0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
27ab0 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20  ot NULL then it 
27ac0 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c  points to a Tabl
27ad0 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69  e object. In thi
27ae0 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a  s case either .*
27af0 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20  * the update or 
27b00 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
27b10 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65   or both, may be
27b20 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31   invoked. The P1
27b30 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20   cursor must.** 
27b40 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
27b50 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  oned using OP_No
27b60 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
27b70 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
27b80 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73  code in .** this
27b90 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61   case. Specifica
27ba0 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63  lly, if one is c
27bb0 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70  onfigured, the p
27bc0 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69  re-update hook i
27bd0 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66  s .** invoked if
27be0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e   P4 is not NULL.
27bf0 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   The update-hook
27c00 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f   is invoked if o
27c10 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  ne is configured
27c20 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20  , .** P4 is not 
27c30 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50  NULL, and the OP
27c40 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
27c50 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a  g is set in P2..
27c60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
27c70 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
27c80 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20  g is set in P2, 
27c90 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73  then P3 contains
27ca0 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20   the address.** 
27cb0 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
27cc0 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
27cd0 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
27ce0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
27cf0 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20   row will.** be 
27d00 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70  set to by the up
27d10 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
27d20 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  _Delete: {.  Vdb
27d30 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63  eCursor *pC;.  c
27d40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a  onst char *zDb;.
27d50 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
27d60 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20   int opflags;.. 
27d70 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e   opflags = pOp->
27d80 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
27d90 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27da0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27db0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27dc0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27dd0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27de0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27df0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27e00 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
27e10 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
27e20 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27e30 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27e40 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73 71 6c 69  eto==0 );.  sqli
27e50 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
27e60 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
27e70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
27e80 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
27e90 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
27ea0 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70   && HasRowid(pOp
27eb0 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f  ->p4.pTab) && pO
27ec0 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p5==0 ){.    
27ed0 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f  /* If p5 is zero
27ee0 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61  , the seek opera
27ef0 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69  tion that positi
27f00 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
27f10 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20  prior to.    ** 
27f20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68  OP_Delete will h
27f30 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65  ave also set the
27f40 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
27f50 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72  t field to the r
27f60 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74  owid of.    ** t
27f70 68 65 20 72 6f 77 20 74 68 61 74 20 69 73 20 62  he row that is b
27f80 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a  eing deleted */.
27f90 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 73      i64 iKey = s
27fa0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
27fb0 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
27fc0 72 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65 72  rsor);.    asser
27fd0 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  t( pC->movetoTar
27fe0 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d  get==iKey );.  }
27ff0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
28000 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
28010 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68   or pre-update-h
28020 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
28030 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a  ked, set zDb to.
28040 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66    ** the name of
28050 20 74 68 65 20 64 62 20 74 6f 20 70 61 73 73 20   the db to pass 
28060 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73  as to it. Also s
28070 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f  et local pTab to
28080 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20   a copy.  ** of 
28090 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79  p4.pTab. Finally
280a0 2c 20 69 66 20 70 35 20 69 73 20 74 72 75 65 2c  , if p5 is true,
280b0 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
280c0 20 74 68 69 73 20 63 75 72 73 6f 72 20 77 61 73   this cursor was
280d0 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64  .  ** last moved
280e0 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72   with OP_Next or
280f0 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65   OP_Prev, not Se
28100 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20  ek or NotFound, 
28110 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43 75  set .  ** VdbeCu
28120 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65  rsor.movetoTarge
28130 74 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  t to the current
28140 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66   rowid.  */.  if
28150 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
28160 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
28170 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
28180 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
28190 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
281a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
281b0 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a  pTab!=0 );.    z
281c0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
281d0 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
281e0 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
281f0 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28  p4.pTab;.    if(
28200 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
28210 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
28220 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62  !=0 && pC->isTab
28230 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e  le ){.      pC->
28240 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
28250 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
28260 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
28270 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
28280 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20  else{.    zDb = 
28290 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64  0;   /* Not need
282a0 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
282b0 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
282c0 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30   */.    pTab = 0
282d0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
282e0 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
282f0 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
28300 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
28310 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
28320 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
28330 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
28340 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
28350 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
28360 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
28370 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
28380 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20 61  p4.pTab ){.    a
28390 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73  ssert( !(opflags
283a0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
283b0 54 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c 7c  TE) .         ||
283c0 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 3d   HasRowid(pTab)=
283d0 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  =0 .         || 
283e0 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66  (aMem[pOp->p3].f
283f0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20  lags & MEM_Int) 
28400 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c 69  .    );.    sqli
28410 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
28420 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
28430 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
28440 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
28450 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
28460 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
28470 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
28480 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  Tab, pC->movetoT
28490 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70  arget,.        p
284a0 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
284b0 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  }.  if( opflags 
284c0 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
284d0 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
284e0 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
284f0 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
28500 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
28510 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
28520 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
28530 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
28540 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
28550 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
28560 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
28570 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
28580 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
28590 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
285a0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
285b0 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
285c0 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
285d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
285e0 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
285f0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
28600 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
28610 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
28620 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
28630 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
28640 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
28650 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
28660 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
28670 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
28680 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
28690 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
286a0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
286b0 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
286c0 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
286d0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
286e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
286f0 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
28700 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
28710 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
28720 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
28730 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
28740 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  lt = 0;.  if( rc
28750 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28760 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
28770 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
28780 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
28790 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
287a0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
287b0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
287c0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
287d0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
287e0 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
287f0 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
28800 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
28810 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
28820 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
28830 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
28840 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
28850 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
28860 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
28870 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
28880 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
28890 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
288a0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
288b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
288c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
288d0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
288e0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
288f0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
28900 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
28910 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
28920 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
28930 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
28940 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
28950 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
28960 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
28970 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
28980 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
28990 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
289a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
289b0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
289c0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
289d0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
289e0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
289f0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
28a00 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
28a10 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
28a20 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
28a30 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72  : if key(P1)!=tr
28a40 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
28a50 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
28a60 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
28a70 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
28a80 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
28a90 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
28aa0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
28ab0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
28ac0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
28ad0 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
28ae0 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
28af0 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
28b00 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
28b10 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
28b20 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
28b30 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
28b40 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
28b50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
28b60 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
28b70 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
28b80 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
28b90 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
28ba0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
28bb0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
28bc0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
28bd0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
28be0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
28bf0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
28c00 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
28c10 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
28c20 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
28c30 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
28c40 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
28c50 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
28c60 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
28c70 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
28c80 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
28c90 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
28ca0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
28cb0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
28cc0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
28cd0 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
28ce0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
28d00 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
28d10 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
28d20 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
28d30 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
28d40 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
28d50 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
28d60 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
28d70 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
28d80 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
28d90 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
28da0 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
28db0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
28dc0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
28dd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
28de0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ror;.  if( res )
28df0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
28e00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  ;.  break;.};../
28e10 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
28e20 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
28e30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
28e40 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
28e50 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
28e60 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
28e70 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
28e80 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
28e90 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65   P1..** Then cle
28ea0 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65  ar the column he
28eb0 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75  ader cache on cu
28ec0 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P3..**.** T
28ed0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
28ee0 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f  rmally use to mo
28ef0 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20  ve a record out 
28f00 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e  of the sorter an
28f10 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69  d into.** a regi
28f20 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65  ster that is the
28f30 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73   source for a ps
28f40 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
28f50 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  r created using.
28f60 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20  ** OpenPseudo.  
28f70 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c  That pseudo-tabl
28f80 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20  e cursor is the 
28f90 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e  one that is iden
28fa0 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72  tified by.** par
28fb0 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61  ameter P3.  Clea
28fc0 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75  ring the P3 colu
28fd0 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74  mn cache as part
28fe0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
28ff0 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d  saves.** us from
29000 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65   having to issue
29010 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c   a separate Null
29020 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  Row instruction 
29030 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61  to clear that ca
29040 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  che..*/.case OP_
29050 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
29060 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29070 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
29080 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
29090 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
290a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
290b0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
290c0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
290d0 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
290e0 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
290f0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
29100 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
29110 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
29120 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
29130 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
29140 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
29150 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
29160 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
29170 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
29180 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
29190 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
291a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
291b0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
291c0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
291d0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
291e0 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
291f0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
29200 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
29210 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  ow content for t
29220 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68  he row at .** wh
29230 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73  ich cursor P1 is
29240 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
29250 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73  ing..** There is
29260 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
29270 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
29280 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
29290 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
292a0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
292b0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
292c0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
292d0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
292e0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
292f0 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65  is an index, the
29300 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73  n the content is
29310 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
29320 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f  row..** If curso
29330 72 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c  r P2 is a table,
29340 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e   then the conten
29350 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74  t extracted is t
29360 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49  he data..**.** I
29370 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
29380 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
29390 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
293a0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
293b0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
293c0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
293d0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  o-table..**.** I
293e0 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 69  f P3!=0 then thi
293f0 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f  s opcode is allo
29400 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65  wed to make an e
29410 70 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74 65 72  phemeral pointer
29420 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74  .** into the dat
29430 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68 61  abase page.  Tha
29440 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
29450 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
29460 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73 74  output.** regist
29470 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61 6c  er will be inval
29480 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61  idated as soon a
29490 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76  s the cursor mov
294a0 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a 2a  es - including.*
294b0 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20 62  * moves caused b
294c0 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73 20  y other cursors 
294d0 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65 20  that "save" the 
294e0 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a  current cursors.
294f0 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f  ** position in o
29500 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 63  rder that they c
29510 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  an write to the 
29520 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20  same table.  If 
29530 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20  P3==0.** then a 
29540 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74 61  copy of the data
29550 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65   is made into me
29560 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20  mory.  P3!=0 is 
29570 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50  faster, but.** P
29580 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a  3==0 is safer..*
29590 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68  *.** If P3!=0 th
295a0 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  en the content o
295b0 66 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  f the P2 registe
295c0 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20  r is unsuitable 
295d0 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50  for use.** in OP
295e0 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20  _Result and any 
295f0 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69  OP_Result will i
29600 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 50 32  nvalidate the P2
29610 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e   register conten
29620 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67  t..** The P2 reg
29630 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73  ister content is
29640 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20   invalidated by 
29650 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f  opcodes like OP_
29660 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62  Function or.** b
29670 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f  y any use of ano
29680 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e  ther cursor poin
29690 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65  ting to the same
296a0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
296b0 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
296c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
296d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
296e0 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
296f0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
29700 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20  ease(p, pOp);.. 
29710 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
29720 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
29730 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
29740 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
29750 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29760 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
29770 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
29780 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
29790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
297a0 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a  orter(pC)==0 );.
297b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
297c0 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
297d0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
297e0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
297f0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
29800 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
29810 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
29820 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
29830 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
29840 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69    ** OP_SeekRowi
29850 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f  d or OP_Rewind/O
29860 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
29870 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
29880 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61  uctions.  ** tha
29890 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
298a0 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20  te the cursor.. 
298b0 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72   ** If this wher
298c0 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20  e not the case, 
298d0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  on of the follow
298e0 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20  ing assert()s.  
298f0 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20  ** would fail.  
29900 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72  Should this ever
29910 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65   change (because
29920 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
29930 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e  he code.  ** gen
29940 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65  erator) then the
29950 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f   fix would be to
29960 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74   insert a call t
29970 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
29980 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
29990 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
299a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
299b0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
299c0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
299d0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
299e0 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f  rsr) );.#if 0  /
299f0 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64  * Not required d
29a00 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ue to the previo
29a10 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73  us to assert() s
29a20 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72  tatements */.  r
29a30 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
29a40 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
29a50 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
29a60 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
29a70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29a80 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71  #endif..  n = sq
29a90 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
29aa0 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20  dSize(pCrsr);.  
29ab0 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
29ac0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
29ad0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
29ae0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
29af0 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
29b00 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  n==0 );.  rc = s
29b10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
29b20 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
29b30 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28   n, pOut);.  if(
29b40 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29b50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
29b60 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20   if( !pOp->p3 ) 
29b70 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
29b80 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
29b90 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
29ba0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
29bb0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
29bc0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
29bd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
29be0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
29bf0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
29c00 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
29c10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
29c20 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
29c30 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
29c40 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
29c50 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
29c60 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
29c70 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
29c80 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
29c90 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
29ca0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
29cb0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
29cc0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
29cd0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
29ce0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
29cf0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
29d00 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
29d10 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
29d20 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
29d30 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
29d40 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
29d50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
29d60 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
29d70 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
29d80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
29d90 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
29da0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
29db0 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  dule;..  pOut = 
29dc0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
29dd0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
29de0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29df0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29e00 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29e10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29e20 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29e30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
29e40 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
29e50 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
29e60 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
29e70 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
29e80 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
29e90 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
29ea0 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
29eb0 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
29ec0 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
29ed0 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
29ee0 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
29ef0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29f00 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
29f10 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
29f20 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20  URTYPE_VTAB ){. 
29f30 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
29f40 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20  c.pVCur!=0 );.  
29f50 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63    pVtab = pC->uc
29f60 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
29f70 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
29f80 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
29f90 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
29fa0 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
29fb0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
29fc0 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75  owid(pC->uc.pVCu
29fd0 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
29fe0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
29ff0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
2a000 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2a010 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2a020 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ror;.#endif /* S
2a030 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2a040 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
2a050 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2a060 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2a070 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2a080 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
2a090 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
2a0a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a0b0 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
2a0c0 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  e(pC);.    if( r
2a0d0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2a0e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
2a0f0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
2a100 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
2a110 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2a120 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
2a130 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c     }.    v = sql
2a140 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72  ite3BtreeInteger
2a150 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Key(pC->uc.pCurs
2a160 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  or);.  }.  pOut-
2a170 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
2a180 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a190 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
2a1a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
2a1b0 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
2a1c0 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
2a1d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
2a1e0 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
2a1f0 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
2a200 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
2a210 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
2a220 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
2a230 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
2a240 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
2a250 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
2a260 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2a270 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2a280 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2a290 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2a2a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2a2b0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
2a2c0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
2a2d0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2a2e0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
2a2f0 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
2a300 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2a310 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
2a320 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2a330 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  );.    sqlite3Bt
2a340 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70  reeClearCursor(p
2a350 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
2a360 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
2a370 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 43  E_DEBUG.  if( pC
2a380 2d 3e 73 65 65 6b 4f 70 3d 3d 30 20 29 20 70 43  ->seekOp==0 ) pC
2a390 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e 75  ->seekOp = OP_Nu
2a3a0 6c 6c 52 6f 77 3b 0a 23 65 6e 64 69 66 0a 20 20  llRow;.#endif.  
2a3b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a3c0 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31 20  ode: SeekEnd P1 
2a3d0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f  * * * *.**.** Po
2a3e0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
2a3f0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2a400 68 65 20 62 74 72 65 65 20 66 6f 72 20 74 68 65  he btree for the
2a410 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20 61   purpose of.** a
2a420 70 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65  ppending a new e
2a430 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74  ntry onto the bt
2a440 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  ree..**.** It is
2a450 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68   assumed that th
2a460 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
2a470 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e 64   only for append
2a480 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69 66  ing and so.** if
2a490 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 76   the cursor is v
2a4a0 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63  alid, then the c
2a4b0 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61  ursor must alrea
2a4c0 64 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a 2a  dy be pointing.*
2a4d0 2a 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  * at the end of 
2a4e0 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f  the btree and so
2a4f0 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20   no changes are 
2a500 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63  made to.** the c
2a510 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ursor..*/./* Opc
2a520 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
2a530 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
2a540 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
2a550 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
2a560 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  or Prev instruct
2a570 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
2a580 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
2a590 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
2a5a0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
2a5b0 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
2a5c0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
2a5d0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
2a5e0 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
2a5f0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
2a600 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
2a610 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
2a620 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
2a630 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
2a640 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
2a650 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
2a660 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
2a670 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
2a680 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
2a690 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
2a6a0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
2a6b0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
2a6c0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
2a6d0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
2a6e0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
2a6f0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
2a700 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
2a710 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61   not Next..*/.ca
2a720 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a 63  se OP_SeekEnd:.c
2a730 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20  ase OP_Last: {  
2a740 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2a750 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2a760 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
2a770 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
2a780 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2a790 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2a7a0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2a7b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2a7c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a7d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2a7e0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2a7f0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2a800 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
2a810 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2a820 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
2a830 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
2a840 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2a850 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
2a860 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
2a870 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
2a880 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
2a890 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73 73  ekEnd ){.    ass
2a8a0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  ert( pOp->p2==0 
2a8b0 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52  );.    pC->seekR
2a8c0 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20 20  esult = -1;.    
2a8d0 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  if( sqlite3Btree
2a8e0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28  CursorIsValidNN(
2a8f0 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20 20  pCrsr) ){.      
2a900 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
2a910 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2a920 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
2a930 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
2a940 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
2a950 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
2a960 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
2a970 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2a980 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
2a990 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2a9a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2a9b0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29   if( pOp->p2>0 )
2a9c0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
2a9d0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
2a9e0 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20 67  .    if( res ) g
2a9f0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2aa00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2aa10 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d 61  /* Opcode: IfSma
2aa20 6c 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  ller P1 P2 P3 * 
2aa30 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65  *.**.** Estimate
2aa40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2aa50 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
2aa60 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32   P1.  Jump to P2
2aa70 20 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74 69   if that.** esti
2aa80 6d 61 74 65 20 69 73 20 6c 65 73 73 20 74 68 61  mate is less tha
2aa90 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  n approximately 
2aaa0 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a  2**(0.1*P3)..*/.
2aab0 63 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c 65  case OP_IfSmalle
2aac0 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  r: {        /* j
2aad0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2aae0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2aaf0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2ab00 74 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a 3b  t res;.  i64 sz;
2ab10 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2ab20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2ab30 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2ab40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2ab50 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ab60 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
2ab70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
2ab80 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
2ab90 20 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20 3d   pCrsr );.  rc =
2aba0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
2abb0 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
2abc0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2abd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2abe0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ror;.  if( res==
2abf0 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73 71  0 ){.    sz = sq
2ac00 6c 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f 75  lite3BtreeRowCou
2ac10 6e 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20 20  ntEst(pCrsr);.  
2ac20 20 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a 3e    if( ALWAYS(sz>
2ac30 3d 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c 6f  =0) && sqlite3Lo
2ac40 67 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70 4f  gEst((u64)sz)<pO
2ac50 70 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31 3b  p->p3 ) res = 1;
2ac60 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2ac70 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2ac80 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
2ac90 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2aca0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
2acb0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f 72  pcode: SorterSor
2acc0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2acd0 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72 65  .** After all re
2ace0 63 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e 20  cords have been 
2acf0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
2ad00 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a  e Sorter object.
2ad10 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  ** identified by
2ad20 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73   P1, invoke this
2ad30 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75 61   opcode to actua
2ad40 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74 69  lly do the sorti
2ad50 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  ng..** Jump to P
2ad60 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  2 if there are n
2ad70 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65 20  o records to be 
2ad80 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  sorted..**.** Th
2ad90 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e 20  is opcode is an 
2ada0 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72  alias for OP_Sor
2adb0 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20  t and OP_Rewind 
2adc0 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a 20  that is used.** 
2add0 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65 63  for Sorter objec
2ade0 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ts..*/./* Opcode
2adf0 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
2ae00 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
2ae10 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
2ae20 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
2ae30 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
2ae40 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
2ae50 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
2ae60 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
2ae70 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
2ae80 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
2ae90 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
2aea0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
2aeb0 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
2aec0 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
2aed0 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
2aee0 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
2aef0 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
2af00 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
2af10 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
2af20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
2af30 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
2af40 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
2af50 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
2af60 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
2af70 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2af80 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
2af90 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
2afa0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
2afb0 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
2afc0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
2afd0 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
2afe0 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
2aff0 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
2b000 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
2b010 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Sort:    /* jump
2b020 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74   */.case OP_Sort
2b030 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2b040 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
2b050 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
2b060 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
2b070 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
2b080 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
2b090 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
2b0a0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
2b0b0 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20  S_SORT]++;.  /* 
2b0c0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
2b0d0 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
2b0e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
2b0f0 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  nd P1 P2 * * P5.
2b100 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2b110 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2b120 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
2b130 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
2b140 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2b150 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
2b160 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
2b170 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2b180 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
2b190 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2b1a0 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
2b1b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2b1c0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
2b1d0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
2b1e0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
2b1f0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
2b200 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
2b210 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
2b220 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
2b230 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 73  and the table is
2b240 20 6e 6f 74 20 65 6d 70 74 79 2c 20 74 68 65 6e   not empty, then
2b250 20 74 68 65 20 22 73 6b 69 70 2d 6e 65 78 74 22   the "skip-next"
2b260 0a 2a 2a 20 66 6c 61 67 20 69 73 20 73 65 74 20  .** flag is set 
2b270 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 73 6f  on the cursor so
2b280 20 74 68 61 74 20 74 68 65 20 6e 65 78 74 20 4f   that the next O
2b290 50 5f 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  P_Next instructi
2b2a0 6f 6e 20 0a 2a 2a 20 65 78 65 63 75 74 65 64 20  on .** executed 
2b2b0 6f 6e 20 69 74 20 69 73 20 61 20 6e 6f 2d 6f 70  on it is a no-op
2b2c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2b2d0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
2b2e0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
2b2f0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
2b300 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
2b310 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
2b320 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
2b330 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2b340 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
2b350 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
2b360 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
2b370 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rev..*/.case OP_
2b380 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
2b390 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2b3a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2b3b0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
2b3c0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
2b3d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b3e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2b3f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2b400 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2b410 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b420 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2b430 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2b440 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
2b450 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
2b460 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65    res = 1;.#ifde
2b470 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2b480 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
2b490 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a  _Rewind;.#endif.
2b4a0 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
2b4b0 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
2b4c0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2b4d0 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29  Rewind(pC, &res)
2b4e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2b4f0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2b500 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b510 45 45 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20  EE );.    pCrsr 
2b520 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
2b530 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2b540 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  rsr );.    rc = 
2b550 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
2b560 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
2b570 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b580 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20  MIT_WINDOWFUNC. 
2b590 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
2b5a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 6b 69   sqlite3BtreeSki
2b5b0 70 4e 65 78 74 28 70 43 72 73 72 29 3b 0a 23 65  pNext(pCrsr);.#e
2b5c0 6e 64 69 66 0a 20 20 20 20 70 43 2d 3e 64 65 66  ndif.    pC->def
2b5d0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
2b5e0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
2b5f0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2b600 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
2b610 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2b620 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
2b630 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
2b640 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
2b650 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
2b660 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
2b670 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2b680 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
2b690 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2b6a0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2b6b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
2b6c0 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
2b6d0 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
2b6e0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
2b6f0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
2b700 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
2b710 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
2b720 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2b730 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
2b740 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
2b750 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
2b760 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
2b770 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
2b780 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
2b790 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
2b7a0 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
2b7b0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
2b7c0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
2b7d0 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
2b7e0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
2b7f0 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
2b800 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
2b810 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
2b820 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
2b830 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
2b840 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
2b850 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
2b860 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
2b870 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
2b880 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
2b890 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
2b8a0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
2b8b0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
2b8c0 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
2b8d0 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
2b8e0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
2b8f0 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
2b900 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
2b910 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
2b920 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
2b930 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
2b940 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
2b950 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
2b960 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
2b970 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
2b980 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
2b990 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
2b9a0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
2b9b0 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
2b9c0 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
2b9d0 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
2b9e0 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
2b9f0 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
2ba00 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
2ba10 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
2ba20 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
2ba30 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
2ba40 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
2ba50 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
2ba60 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
2ba70 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
2ba80 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
2ba90 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
2baa0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
2bab0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
2bac0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
2bad0 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
2bae0 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
2baf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
2bb00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2bb10 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72  *.** Back up cur
2bb20 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
2bb30 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
2bb40 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74  previous key/dat
2bb50 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
2bb60 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2bb70 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
2bb80 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61   previous key/va
2bb90 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
2bba0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
2bbb0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
2bbc0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
2bbd0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
2bbe0 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65  backup was succe
2bbf0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
2bc00 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2bc10 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ..**.**.** The P
2bc20 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  rev opcode is on
2bc30 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69  ly valid followi
2bc40 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65  ng an SeekLT, Se
2bc50 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c  ekLE, or.** OP_L
2bc60 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ast opcode used 
2bc70 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
2bc80 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73  cursor.  Prev is
2bc90 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
2bca0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54  to follow SeekGT
2bcb0 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f  , SeekGE, or OP_
2bcc0 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  Rewind..**.** Th
2bcd0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
2bce0 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
2bcf0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
2bd00 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31  do-table.  If P1
2bd10 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20   is.** not open 
2bd20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
2bd30 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
2bd40 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c  **.** The P3 val
2bd50 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  ue is a hint to 
2bd60 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d  the btree implem
2bd70 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d  entation. If P3=
2bd80 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e  =1, that.** mean
2bd90 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69  s P1 is an SQL i
2bda0 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68  ndex and that th
2bdb0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
2bdc0 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a  ould have been.*
2bdd0 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61  * omitted if tha
2bde0 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e  t index had been
2bdf0 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20   unique.  P3 is 
2be00 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69  usually 0.  P3 i
2be10 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68  s.** always eith
2be20 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a  er 0 or 1..**.**
2be30 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66   P4 is always of
2be40 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45   type P4_ADVANCE
2be50 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70  . The function p
2be60 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f  ointer points to
2be70 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65  .** sqlite3Btree
2be80 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a  Previous()..**.*
2be90 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
2bea0 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
2beb0 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
2bec0 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
2bed0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
2bee0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
2bef0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
2bf00 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ented..*/./* Opc
2bf10 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74 20  ode: SorterNext 
2bf20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
2bf30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
2bf40 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
2bf50 50 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  P_Next except th
2bf60 61 74 20 50 31 20 6d 75 73 74 20 62 65 20 61 0a  at P1 must be a.
2bf70 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63 74  ** sorter object
2bf80 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 4f   for which the O
2bf90 50 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70 63  P_SorterSort opc
2bfa0 6f 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ode has been.** 
2bfb0 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f  invoked.  This o
2bfc0 70 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20 74  pcode advances t
2bfd0 68 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  he cursor to the
2bfe0 20 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20   next sorted.** 
2bff0 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73  record, or jumps
2c000 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20   to P2 if there 
2c010 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74  are no more sort
2c020 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63  ed records..*/.c
2c030 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
2c040 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
2c050 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2c060 43 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  C;..  pC = p->ap
2c070 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2c080 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
2c090 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
2c0a0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2c0b0 4e 65 78 74 28 64 62 2c 20 70 43 29 3b 0a 20 20  Next(db, pC);.  
2c0c0 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a  goto next_tail;.
2c0d0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
2c0e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c0f0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
2c100 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2c110 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
2c120 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2c130 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2c140 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2c150 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
2c160 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
2c170 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2c180 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2c190 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2c1a0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2c1b0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2c1c0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c1d0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c1e0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2c1f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2c200 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
2c210 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
2c220 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
2c230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2c240 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
2c250 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2c260 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
2c270 72 65 76 69 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a  revious );..  /*
2c280 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
2c290 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
2c2a0 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  ter SeekGT, Seek
2c2b0 47 45 2c 20 52 65 77 69 6e 64 2c 20 61 6e 64 20  GE, Rewind, and 
2c2c0 46 6f 75 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20  Found..  ** The 
2c2d0 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
2c2e0 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
2c2f0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61  eekLT, SeekLE, a
2c300 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73  nd Last. */.  as
2c310 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c320 65 21 3d 4f 50 5f 4e 65 78 74 0a 20 20 20 20 20  e!=OP_Next.     
2c330 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2c340 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43  =OP_SeekGT || pC
2c350 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2c360 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kGE.       || pC
2c370 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77  ->seekOp==OP_Rew
2c380 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  ind || pC->seekO
2c390 70 3d 3d 4f 50 5f 46 6f 75 6e 64 20 0a 20 20 20  p==OP_Found .   
2c3a0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2c3b0 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 7c 7c 20  p==OP_NullRow|| 
2c3c0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2c3d0 65 65 6b 52 6f 77 69 64 29 3b 0a 20 20 61 73 73  eekRowid);.  ass
2c3e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2c3f0 21 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20  !=OP_Prev.      
2c400 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2c410 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d  OP_SeekLT || pC-
2c420 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2c430 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  LE.       || pC-
2c440 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74  >seekOp==OP_Last
2c450 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e   .       || pC->
2c460 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52  seekOp==OP_NullR
2c470 6f 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70  ow);..  rc = pOp
2c480 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43  ->p4.xAdvance(pC
2c490 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f  ->uc.pCursor, pO
2c4a0 70 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69  p->p3);.next_tai
2c4b0 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  l:.  pC->cacheSt
2c4c0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2c4d0 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  LE;.  VdbeBranch
2c4e0 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
2c4f0 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  _OK,2);.  if( rc
2c500 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2c510 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
2c520 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   0;.    p->aCoun
2c530 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
2c540 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2c550 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
2c560 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
2c570 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a  endif.    goto j
2c580 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
2c590 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2c5a0 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  t;.  }.  if( rc!
2c5b0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67  =SQLITE_DONE ) g
2c5c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c5d0 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53  _error;.  rc = S
2c5e0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e  QLITE_OK;.  pC->
2c5f0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67  nullRow = 1;.  g
2c600 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
2c610 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
2c620 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
2c630 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2c640 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2c650 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67  =r[P2].**.** Reg
2c660 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61  ister P2 holds a
2c670 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20  n SQL index key 
2c680 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a  made using the.*
2c690 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  * MakeRecord ins
2c6a0 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73  tructions.  This
2c6b0 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74   opcode writes t
2c6c0 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20  hat key.** into 
2c6d0 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44  the index P1.  D
2c6e0 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
2c6f0 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20  y is nil..**.** 
2c700 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72  If P4 is not zer
2c710 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  o, then it is th
2c720 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
2c730 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b  es in the unpack
2c740 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67  ed.** key of reg
2c750 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63  (P2).  In that c
2c760 61 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69  ase, P3 is the i
2c770 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73  ndex of the firs
2c780 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f  t register.** fo
2c790 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  r the unpacked k
2c7a0 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62  ey.  The availab
2c7b0 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70  ility of the unp
2c7c0 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f  acked key can so
2c7d0 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e  metimes.** be an
2c7e0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a   optimization..*
2c7f0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
2c800 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  he OPFLAG_APPEND
2c810 20 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69   bit set, that i
2c820 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
2c830 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20  b-tree layer.** 
2c840 74 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74  that this insert
2c850 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
2c860 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
2c870 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
2c880 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62  OPFLAG_NCHANGE b
2c890 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
2c8a0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2c8b0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
2c8c0 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
2c8d0 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f  ction.  If the O
2c8e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2c8f0 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74  t is clear,.** t
2c900 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
2c910 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e  ounter is unchan
2c920 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ged..**.** If th
2c930 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
2c940 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50  RESULT flag of P
2c950 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d  5 is set, the im
2c960 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
2c970 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72  ht.** run faster
2c980 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20   by avoiding an 
2c990 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b  unnecessary seek
2c9a0 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20   on cursor P1.  
2c9b0 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20  However,.** the 
2c9c0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2c9d0 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f  SULT flag must o
2c9e0 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68  nly be set if th
2c9f0 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f  ere have been no
2ca00 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20   prior.** seeks 
2ca10 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72  on the cursor or
2ca20 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   if the most rec
2ca30 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20  ent seek used a 
2ca40 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a  key equivalent.*
2ca50 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  * to P2. .**.** 
2ca60 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2ca70 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2ca80 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
2ca90 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
2caa0 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
2cab0 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
2cac0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2cad0 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50  orterInsert P1 P
2cae0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2caf0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a  sis: key=r[P2].*
2cb00 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
2cb10 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e   holds an SQL in
2cb20 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
2cb30 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
2cb40 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
2cb50 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
2cb60 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
2cb70 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74  ** into the sort
2cb80 65 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  er P1.  Data for
2cb90 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2cba0 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  l..*/.case OP_So
2cbb0 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20  rterInsert:     
2cbc0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65    /* in2 */.case
2cbd0 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b   OP_IdxInsert: {
2cbe0 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
2cbf0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2cc00 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f  pC;.  BtreePaylo
2cc10 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  ad x;..  assert(
2cc20 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2cc30 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2cc40 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2cc50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2cc60 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2cc70 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2cc80 70 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pC);.  assert( p
2cc90 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2cca0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2ccb0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
2ccc0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
2ccd0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2cce0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2ccf0 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
2cd00 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
2cd10 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
2cd20 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
2cd30 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2cd40 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2cd50 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2cd60 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  REE || pOp->opco
2cd70 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2cd80 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ert );.  assert(
2cd90 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2cda0 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
2cdb0 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
2cdc0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2cdd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2cde0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2cdf0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2ce00 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  rt ){.    rc = s
2ce10 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2ce20 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b  Write(pC, pIn2);
2ce30 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
2ce40 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
2ce50 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e      x.pKey = pIn
2ce60 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d  2->z;.    x.aMem
2ce70 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70   = aMem + pOp->p
2ce80 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20  3;.    x.nMem = 
2ce90 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2cea0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2ceb0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
2cec0 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
2ced0 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
2cee0 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
2cef0 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
2cf00 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20  SITION)), .     
2cf10 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
2cf20 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2cf30 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
2cf40 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
2cf50 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74     );.    assert
2cf60 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2cf70 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
2cf80 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2cf90 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2cfa0 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f  }.  if( rc) goto
2cfb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2cfc0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2cfd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
2cfe0 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
2cff0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2d000 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
2d010 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
2d020 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
2d030 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
2d040 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
2d050 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2d060 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
2d070 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
2d080 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
2d090 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
2d0a0 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
2d0b0 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
2d0c0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
2d0d0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
2d0e0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
2d0f0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
2d100 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
2d110 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
2d120 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d130 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
2d140 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2d150 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
2d160 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
2d170 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d180 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2d190 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2d1a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2d1b0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2d1c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2d1d0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2d1e0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c  E_BTREE );.  sql
2d1f0 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2d200 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
2d210 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2d220 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
2d230 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
2d240 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d250 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65  p5==0 );.  r.pKe
2d260 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2d270 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2d280 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
2d290 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20  .  r.default_rc 
2d2a0 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  = 0;.  r.aMem = 
2d2b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2d2c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2d2d0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
2d2e0 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
2d2f0 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
2d300 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2d310 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2d320 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2d330 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2d340 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c  reeDelete(pCrsr,
2d350 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
2d360 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2d370 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d380 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
2d390 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2d3a0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2d3b0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2d3c0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2d3d0 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
2d3e0 74 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  t = 0;.  break;.
2d3f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
2d400 66 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20  ferredSeek P1 * 
2d410 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
2d420 73 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20  sis: Move P3 to 
2d430 50 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64  P1.rowid if need
2d440 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  ed.**.** P1 is a
2d450 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72  n open index cur
2d460 73 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20  sor and P3 is a 
2d470 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f  cursor on the co
2d480 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74  rresponding.** t
2d490 61 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  able.  This opco
2d4a0 64 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72  de does a deferr
2d4b0 65 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50  ed seek of the P
2d4c0 33 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a  3 table cursor.*
2d4d0 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  * to the row tha
2d4e0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
2d4f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
2d500 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   of P1..**.** Th
2d510 69 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64  is is a deferred
2d520 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
2d530 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
2d540 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
2d550 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
2d560 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
2d570 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
2d580 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
2d590 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
2d5a0 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a  /O happens..**.*
2d5b0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61  * P4 may be an a
2d5c0 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73  rray of integers
2d5d0 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52   (type P4_INTARR
2d5e0 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a  AY) containing.*
2d5f0 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * one entry for 
2d600 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
2d610 68 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66  he P3 table.  If
2d620 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69   array entry a(i
2d630 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  ).** is non-zero
2d640 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  , then reading c
2d650 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f  olumn a(i)-1 fro
2d660 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a  m cursor P3 is .
2d670 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  ** equivalent to
2d680 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20   performing the 
2d690 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e  deferred seek an
2d6a0 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  d then reading c
2d6b0 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d  olumn i .** from
2d6c0 20 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72   P1.  This infor
2d6d0 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  mation is stored
2d6e0 20 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20   in P3 and used 
2d6f0 74 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72  to redirect.** r
2d700 65 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20  eads against P3 
2d710 6f 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73  over to P1, thus
2d720 20 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69   possibly avoidi
2d730 6e 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a  ng the need to.*
2d740 2a 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20  * seek and read 
2d750 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a  cursor P3..*/./*
2d760 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69   Opcode: IdxRowi
2d770 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2d780 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2d790 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69  =rowid.**.** Wri
2d7a0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
2d7b0 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
2d7c0 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
2d7d0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
2d7e0 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
2d7f0 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
2d800 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
2d810 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
2d820 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
2d830 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
2d840 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
2d850 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
2d860 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
2d870 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
2d880 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
2d890 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
2d8a0 65 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65  e OP_DeferredSee
2d8b0 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  k:.case OP_IdxRo
2d8c0 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
2d8d0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2d8e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
2d8f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2d900 20 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72   P1 index cursor
2d910 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2d920 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20   *pTabCur;      
2d930 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c    /* The P2 tabl
2d940 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66  e cursor (OP_Def
2d950 65 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20  erredSeek only) 
2d960 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20  */.  i64 rowid; 
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d980 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50   /* Rowid that P
2d990 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73  1 current points
2d9a0 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
2d9b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d9c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2d9d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2d9e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2d9f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2da00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2da10 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2da20 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2da30 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2da40 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
2da50 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
2da60 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2da70 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2da80 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
2da90 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  rt( !pC->nullRow
2daa0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2dab0 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a  =OP_IdxRowid );.
2dac0 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77  .  /* The IdxRow
2dad0 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f  id and Seek opco
2dae0 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64  des are combined
2daf0 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20   because of the 
2db00 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a  commonality.  **
2db10 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43   of sqlite3VdbeC
2db20 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61  ursorRestore() a
2db30 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64  nd sqlite3VdbeId
2db40 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72  xRowid(). */.  r
2db50 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
2db60 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
2db70 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56  ;..  /* sqlite3V
2db80 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
2db90 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20  ) can only fail 
2dba0 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  if the record ha
2dbb0 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20  s been deleted. 
2dbc0 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64   ** out from und
2dbd0 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  er the cursor.  
2dbe0 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20  That will never 
2dbf0 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49  happens for an I
2dc00 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20  dxRowid.  ** or 
2dc10 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20  Seek opcode */. 
2dc20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
2dc30 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
2dc40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2dc50 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d  ror;..  if( !pC-
2dc60 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2dc70 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  rowid = 0;  /* N
2dc80 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2dc90 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
2dca0 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
2dcb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2dcc0 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
2dcd0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
2dce0 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28  &rowid);.    if(
2dcf0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2dd00 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
2dd10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2dd20 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
2dd30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44  Op->opcode==OP_D
2dd40 65 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20  eferredSeek ){. 
2dd50 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2dd60 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
2dd70 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p3<p->nCursor );
2dd80 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d  .      pTabCur =
2dd90 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2dda0 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  3];.      assert
2ddb0 28 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a  ( pTabCur!=0 );.
2ddc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2ddd0 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d  abCur->eCurType=
2dde0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2ddf0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2de00 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72  pTabCur->uc.pCur
2de10 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  sor!=0 );.      
2de20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2de30 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
2de40 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52    pTabCur->nullR
2de50 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54  ow = 0;.      pT
2de60 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72  abCur->movetoTar
2de70 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  get = rowid;.   
2de80 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65     pTabCur->defe
2de90 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
2dea0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
2deb0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2dec0 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70  TARRAY || pOp->p
2ded0 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20  4.ai==0 );.     
2dee0 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61   pTabCur->aAltMa
2def0 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  p = pOp->p4.ai;.
2df00 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70        pTabCur->p
2df10 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a  AltCursor = pC;.
2df20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2df30 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2df40 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2df50 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
2df60 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
2df70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2df80 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2df90 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a  =OP_IdxRowid );.
2dfa0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2dfb0 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b  emSetNull(&aMem[
2dfc0 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20  pOp->p2]);.  }. 
2dfd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2dfe0 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
2dff0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2e000 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2e010 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2e020 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2e030 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2e040 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2e050 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2e060 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2e070 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
2e080 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2e090 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
2e0a0 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
2e0b0 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
2e0c0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
2e0d0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
2e0e0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2e0f0 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
2e100 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
2e110 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2e120 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
2e130 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2e140 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
2e150 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2e160 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
2e170 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2e180 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2e190 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2e1a0 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20   IdxGT P1 P2 P3 
2e1b0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2e1c0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2e1d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2e1e0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2e1f0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2e200 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2e210 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2e220 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2e230 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
2e240 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2e250 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
2e260 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
2e270 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2e280 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2e290 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2e2a0 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
2e2b0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
2e2c0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
2e2d0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2e2e0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
2e2f0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2e300 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2e310 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2e320 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2e330 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2e340 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2e350 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50  IdxLT P1 P2 P3 P
2e360 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2e370 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2e380 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2e390 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2e3a0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2e3b0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2e3c0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2e3d0 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2e3e0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2e3f0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2e400 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2e410 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
2e420 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2e430 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2e440 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2e450 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
2e460 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
2e470 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
2e480 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e490 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
2e4a0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2e4b0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
2e4c0 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
2e4d0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2e4e0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2e4f0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2e500 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50  IdxLE P1 P2 P3 P
2e510 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2e520 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2e530 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2e540 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2e550 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2e560 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2e570 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2e580 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2e590 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
2e5a0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2e5b0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2e5c0 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
2e5d0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2e5e0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2e5f0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2e600 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
2e610 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
2e620 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
2e630 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e640 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
2e650 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2e660 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2e670 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74  ump.** to P2. Ot
2e680 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2e690 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2e6a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2e6b0 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20  .case OP_IdxLE: 
2e6c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2e6d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
2e6e0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2e6f0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2e700 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
2e710 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2e720 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20  P_IdxGE:  {     
2e730 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
2e740 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2e750 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
2e760 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
2e770 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2e780 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2e790 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2e7a0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2e7b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2e7c0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2e7d0 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
2e7e0 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
2e7f0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2e800 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2e810 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2e820 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73  Cursor!=0);.  as
2e830 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2e840 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2e850 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2e860 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
2e870 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
2e880 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
2e890 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79  NT32 );.  r.pKey
2e8a0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2e8b0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2e8c0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2e8d0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2e8e0 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  ode<OP_IdxLT ){.
2e8f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2e900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2e910 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2e920 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
2e930 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2e940 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
2e950 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2e960 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
2e970 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2e980 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2e990 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2e9a0 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
2e9b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2e9c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2e9d0 45 42 55 47 0a 20 20 7b 0a 20 20 20 20 69 6e 74  EBUG.  {.    int
2e9e0 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
2e9f0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
2ea00 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2ea10 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2ea20 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20  Mem[i]) );.     
2ea30 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2ea40 70 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d 65 6d  pOp->p3+i, &aMem
2ea50 5b 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20  [pOp->p3+i]);.  
2ea60 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
2ea70 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
2ea80 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2ea90 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2eaa0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2eab0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2eac0 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
2ead0 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
2eae0 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
2eaf0 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
2eb00 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
2eb10 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
2eb20 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
2eb30 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
2eb40 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
2eb50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2eb60 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2eb70 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2eb80 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2eb90 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
2eba0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2ebb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2ebc0 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
2ebd0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
2ebe0 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
2ebf0 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2ec00 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
2ec10 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2ec20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2ec30 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20  ;.  if( res>0 ) 
2ec40 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2ec50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ec60 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
2ec70 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2ec80 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
2ec90 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
2eca0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2ecb0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
2ecc0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
2ecd0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2ece0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
2ecf0 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
2ed00 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
2ed10 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2ed20 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
2ed30 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
2ed40 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
2ed50 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
2ed60 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2ed70 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
2ed80 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
2ed90 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
2eda0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
2edb0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
2edc0 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
2edd0 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
2ede0 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
2edf0 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
2ee00 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
2ee10 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
2ee20 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
2ee30 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
2ee40 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
2ee50 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
2ee60 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
2ee70 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
2ee80 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
2ee90 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
2eea0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
2eeb0 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
2eec0 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
2eed0 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
2eee0 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2eef0 65 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e  egister P2. If n
2ef00 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20  o page movement 
2ef10 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
2ef20 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62  cause the.** tab
2ef30 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
2ef40 20 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65   was already the
2ef50 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
2ef60 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
2ef70 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74  a .** zero is st
2ef80 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2ef90 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43   P2.  If AUTOVAC
2efa0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2efb0 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20  then a zero .** 
2efc0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2efd0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2efe0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f  This opcode thro
2eff0 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
2f000 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
2f010 69 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77  ive reader VMs w
2f020 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76  hen.** it is inv
2f030 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f  oked. This is do
2f040 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20  ne to avoid the 
2f050 64 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63  difficulty assoc
2f060 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75  iated with .** u
2f070 70 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67  pdating existing
2f080 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20   cursors when a 
2f090 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76  root page is mov
2f0a0 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43  ed in an AUTOVAC
2f0b0 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  UUM .** database
2f0c0 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20  . This error is 
2f0d0 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74  thrown even if t
2f0e0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e  he database is n
2f0f0 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d  ot an AUTOVACUUM
2f100 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72   .** db in order
2f110 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64   to avoid introd
2f120 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61  ucing an incompa
2f130 74 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e  tibility between
2f140 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20   autovacuum .** 
2f150 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75  and non-autovacu
2f160 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20  um modes..**.** 
2f170 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
2f180 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
2f190 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
2f1a0 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  2 */.  int iMove
2f1b0 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  d;.  int iDb;.. 
2f1c0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2f1d0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2f1e0 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  0);.  assert( p-
2f1f0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2f200 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f210 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2f220 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2f230 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2f240 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2f250 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2f260 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2f270 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2f280 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2f290 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2f2a0 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2f2b0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
2f2c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2f2d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2f2e0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2f2f0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2f300 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2f310 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2f320 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2f330 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2f340 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2f350 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2f360 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2f370 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2f380 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2f390 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2f3a0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2f3b0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2f3c0 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20  u.i = iMoved;.  
2f3d0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2f3e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2f3f0 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  or;.#ifndef SQLI
2f400 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2f410 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65  UM.    if( iMove
2f420 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
2f430 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2f440 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
2f450 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
2f460 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
2f470 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
2f480 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
2f490 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
2f4a0 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
2f4b0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
2f4c0 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
2f4d0 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
2f4e0 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
2f4f0 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
2f500 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2f510 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2f520 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
2f530 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
2f540 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2f550 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2f560 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2f570 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2f580 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
2f590 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
2f5a0 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
2f5b0 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
2f5c0 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
2f5d0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2f5e0 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
2f5f0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2f600 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2f610 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
2f620 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2f630 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
2f640 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
2f650 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2f660 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2f670 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2f680 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2f690 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2f6a0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2f6b0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2f6c0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2f6d0 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
2f6e0 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
2f6f0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2f700 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
2f710 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
2f720 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
2f730 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
2f740 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
2f750 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
2f760 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
2f770 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2f780 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2f790 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2f7a0 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
2f7b0 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
2f7c0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
2f7d0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2f7e0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
2f7f0 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
2f800 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2f810 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2f820 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2f830 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
2f840 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
2f850 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
2f860 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
2f870 6e 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74 65 33  nge;. .  sqlite3
2f880 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
2f890 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 6e 43  nter(p, 0);.  nC
2f8a0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
2f8b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f8c0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2f8d0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2f8e0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2f8f0 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
2f900 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
2f910 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
2f920 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
2f930 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
2f940 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
2f950 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
2f960 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
2f970 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
2f980 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
2f990 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
2f9a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2f9b0 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
2f9c0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
2f9d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
2f9e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2f9f0 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
2fa00 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
2fa10 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
2fa20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2fa30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2fa40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2fa50 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f   Opcode: ResetSo
2fa60 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  rter P1 * * * *.
2fa70 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2fa80 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74   contents from t
2fa90 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
2faa0 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20  le or sorter.** 
2fab0 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20  that is open on 
2fac0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
2fad0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c   This opcode onl
2fae0 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73  y works for curs
2faf0 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72  ors used for sor
2fb00 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e  ting and.** open
2fb10 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45  ed with OP_OpenE
2fb20 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53  phemeral or OP_S
2fb30 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61  orterOpen..*/.ca
2fb40 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65  se OP_ResetSorte
2fb50 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  r: {.  VdbeCurso
2fb60 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72  r *pC;. .  asser
2fb70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2fb80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2fb90 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2fba0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2fbb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2fbc0 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74   );.  if( isSort
2fbd0 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71  er(pC) ){.    sq
2fbe0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
2fbf0 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e  eset(db, pC->uc.
2fc00 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73  pSorter);.  }els
2fc10 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2fc20 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2fc30 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2fc40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2fc50 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20  Ephemeral );.   
2fc60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2fc70 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75  eeClearTableOfCu
2fc80 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
2fc90 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63  sor);.    if( rc
2fca0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2fcb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2fcc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2fcd0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74 72  pcode: CreateBtr
2fce0 65 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ee P1 P2 P3 * *.
2fcf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2fd00 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20 66  2]=root iDb=P1 f
2fd10 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c  lags=P3.**.** Al
2fd20 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d 74  locate a new b-t
2fd30 72 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ree in the main 
2fd40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2fd50 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2fd60 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61 73  .** TEMP databas
2fd70 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2fd80 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2fd90 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2fda0 20 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20 61   P1>1.  The P3 a
2fdb0 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  rgument must be 
2fdc0 31 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 29  1 (BTREE_INTKEY)
2fdd0 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62   for a rowid tab
2fde0 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62 65  le.** it must be
2fdf0 20 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45   2 (BTREE_BLOBKE
2fe00 59 29 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20  Y) for an index 
2fe10 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  or WITHOUT ROWID
2fe20 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
2fe30 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
2fe40 6f 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72 65  of the new b-tre
2fe50 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  e is stored in r
2fe60 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
2fe70 61 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74 72  ase OP_CreateBtr
2fe80 65 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ee: {          /
2fe90 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2fea0 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pgno;.  Db *pDb;
2feb0 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ..  sqlite3VdbeI
2fec0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2fed0 70 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20 3d 20  p, 0);.  pOut = 
2fee0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2fef0 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d  , pOp);.  pgno =
2ff00 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2ff10 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54  p->p3==BTREE_INT
2ff20 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  KEY || pOp->p3==
2ff30 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b  BTREE_BLOBKEY );
2ff40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ff50 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2ff60 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2ff70 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2ff80 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2ff90 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2ffa0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2ffb0 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
2ffc0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2ffd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
2ffe0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20  >pBt!=0 );.  rc 
2fff0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
30000 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
30010 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e  Bt, &pgno, pOp->
30020 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p3);.  if( rc ) 
30030 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
30040 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d  o_error;.  pOut-
30050 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
30060 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
30070 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20  de: SqlExec * * 
30080 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e  * P4 *.**.** Run
30090 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
300a0 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  nt or statements
300b0 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
300c0 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  e P4 string..*/.
300d0 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a  case OP_SqlExec:
300e0 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
300f0 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
30100 28 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53  (p, 0);.  db->nS
30110 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d  qlExec++;.  rc =
30120 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
30130 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20  , pOp->p4.z, 0, 
30140 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71  0, 0);.  db->nSq
30150 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72  lExec--;.  if( r
30160 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
30170 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
30180 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
30190 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
301a0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
301b0 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
301c0 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
301d0 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
301e0 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
301f0 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
30200 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
30210 20 63 6c 61 75 73 65 20 50 34 2e 20 20 49 66 20   clause P4.  If 
30220 50 34 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69  P4 is a NULL poi
30230 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65 0a 2a  nter, then the.*
30240 2a 20 65 6e 74 69 72 65 20 73 63 68 65 6d 61 20  * entire schema 
30250 66 6f 72 20 50 31 20 69 73 20 72 65 70 61 72 73  for P1 is repars
30260 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ed..**.** This o
30270 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
30280 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
30290 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
302a0 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
302b0 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
302c0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
302d0 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
302e0 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
302f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
30300 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
30310 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
30320 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
30330 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
30340 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
30350 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
30360 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
30370 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
30380 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
30390 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
303a0 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
303b0 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
303c0 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
303d0 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
303e0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
303f0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
30400 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
30410 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
30420 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
30430 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
30440 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
30450 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
30460 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
30470 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
30480 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
30490 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
304a0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
304b0 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
304c0 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
304d0 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
304e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
304f0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
30500 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  .  if( pOp->p4.z
30510 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
30520 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 64 62  e3SchemaClear(db
30530 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65  ->aDb[iDb].pSche
30540 6d 61 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62  ma);.    db->mDb
30550 46 6c 61 67 73 20 26 3d 20 7e 44 42 46 4c 41 47  Flags &= ~DBFLAG
30560 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a  _SchemaKnownOk;.
30570 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
30580 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 44 62 2c  InitOne(db, iDb,
30590 20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 49 4e   &p->zErrMsg, IN
305a0 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c  ITFLAG_AlterTabl
305b0 65 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46  e);.    db->mDbF
305c0 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
305d0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
305e0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
305f0 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
30600 20 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20    {.    zMaster 
30610 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20  = MASTER_NAME;. 
30620 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
30630 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
30640 61 2e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  a.iDb = iDb;.   
30650 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
30660 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
30670 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 6d  ;.    initData.m
30680 49 6e 69 74 46 6c 61 67 73 20 3d 20 30 3b 0a 20  InitFlags = 0;. 
30690 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
306a0 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
306b0 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
306c0 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
306d0 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
306e0 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72  RE %s ORDER BY r
306f0 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62  owid",.       db
30700 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e  ->aDb[iDb].zDbSN
30710 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
30720 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
30730 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
30740 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
30750 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  OMEM_BKPT;.    }
30760 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
30770 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  rt( db->init.bus
30780 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62  y==0 );.      db
30790 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
307a0 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e  .      initData.
307b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
307c0 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 6e        initData.n
307d0 49 6e 69 74 52 6f 77 20 3d 20 30 3b 0a 20 20 20  InitRow = 0;.   
307e0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
307f0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
30800 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
30810 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
30820 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
30830 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
30840 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
30850 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
30860 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
30870 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
30880 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 6e 69  SQLITE_OK && ini
30890 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77 3d 3d  tData.nInitRow==
308a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
308b0 54 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  The OP_ParseSche
308c0 6d 61 20 6f 70 63 6f 64 65 20 77 69 74 68 20 61  ma opcode with a
308d0 20 6e 6f 6e 2d 4e 55 4c 4c 20 50 34 20 61 72 67   non-NULL P4 arg
308e0 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 70 61 72  ument should par
308f0 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 74  se.        ** at
30900 20 6c 65 61 73 74 20 6f 6e 65 20 53 51 4c 20 73   least one SQL s
30910 74 61 74 65 6d 65 6e 74 2e 20 41 6e 79 20 6c 65  tatement. Any le
30920 73 73 20 74 68 61 6e 20 74 68 61 74 20 69 6e 64  ss than that ind
30930 69 63 61 74 65 73 20 74 68 61 74 0a 20 20 20 20  icates that.    
30940 20 20 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74      ** the sqlit
30950 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
30960 73 20 63 6f 72 72 75 70 74 2e 20 2a 2f 0a 20 20  s corrupt. */.  
30970 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
30980 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
30990 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
309a0 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62  lite3DbFreeNN(db
309b0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
309c0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
309d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
309e0 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
309f0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
30a00 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
30a10 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
30a20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
30a30 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
30a40 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  m;.    }.    got
30a50 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
30a60 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
30a70 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
30a80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
30a90 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
30aa0 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
30ab0 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
30ac0 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
30ad0 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
30ae0 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
30af0 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
30b00 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
30b10 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
30b20 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
30b30 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
30b40 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
30b50 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
30b60 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
30b70 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
30b80 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
30b90 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
30ba0 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
30bb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
30bc0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
30bd0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
30be0 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
30bf0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28   pOp->p1);.  if(
30c00 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
30c10 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
30c20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
30c30 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
30c40 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
30c50 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
30c60 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
30c70 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
30c80 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
30c90 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
30ca0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
30cb0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
30cc0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
30cd0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
30ce0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
30cf0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
30d00 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
30d10 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
30d20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
30d30 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
30d40 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
30d50 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
30d60 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
30d70 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
30d80 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
30d90 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
30da0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
30db0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
30dc0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
30dd0 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
30de0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
30df0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
30e00 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
30e10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30e20 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
30e30 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
30e40 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
30e50 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
30e60 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
30e70 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
30e80 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
30e90 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
30ea0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
30eb0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
30ec0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
30ed0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
30ee0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
30ef0 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  de).** in order 
30f00 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
30f10 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
30f20 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
30f30 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
30f40 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
30f50 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
30f60 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
30f70 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
30f80 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
30f90 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
30fa0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
30fb0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
30fc0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
30fd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
30fe0 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20   DropTrigger P1 
30ff0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
31000 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
31010 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
31020 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
31030 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
31040 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65  the trigger name
31050 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
31060 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
31070 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69  lled after a tri
31080 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70  gger.** is dropp
31090 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
310a0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
310b0 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
310c0 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
310d0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
310e0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
310f0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
31100 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
31110 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
31120 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
31130 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  r: {.  sqlite3Vd
31140 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
31150 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69  er(p, 0);.  sqli
31160 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
31170 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
31180 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
31190 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
311a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
311b0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
311c0 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
311d0 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
311e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
311f0 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
31200 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
31210 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
31220 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
31230 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
31240 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
31250 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
31260 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
31270 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
31280 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
31290 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
312a0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
312b0 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
312c0 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20  ntains one less 
312d0 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  than the maximum
312e0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
312f0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
31300 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
31310 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
31320 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
31330 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
31340 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
31350 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
31360 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
31370 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
31380 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
31390 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
313a0 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
313b0 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
313c0 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
313d0 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
313e0 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
313f0 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69  gers.** stored i
31400 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72  n P4_INTARRAY ar
31410 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  gument..**.** If
31420 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
31430 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
31440 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
31450 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
31460 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
31470 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
31480 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
31490 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
314a0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
314b0 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
314c0 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
314d0 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
314e0 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
314f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
31500 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
31510 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
31520 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
31530 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
31540 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
31550 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
31560 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
31570 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ed */.  int nErr
31580 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
31590 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
315a0 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
315b0 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
315c0 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
315d0 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
315e0 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
315f0 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
31600 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
31610 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
31620 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
31630 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
31640 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f   pOp->p2;.  aRoo
31650 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  t = pOp->p4.ai;.
31660 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
31670 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  0 );.  assert( a
31680 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29  Root[0]==nRoot )
31690 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
316a0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
316b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
316c0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
316d0 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
316e0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
316f0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
31700 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
31710 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
31720 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
31730 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
31740 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
31750 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31760 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
31770 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
31780 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
31790 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
317a0 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20  p->p5) );.  z = 
317b0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
317c0 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
317d0 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
317e0 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f   &aRoot[1], nRoo
317f0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
31820 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20  u.i+1, &nErr);. 
31830 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
31840 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
31850 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
31860 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
31870 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
31880 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
31890 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
318a0 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  .    pnErr->u.i 
318b0 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73  -= nErr-1;.    s
318c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
318d0 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
318e0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
318f0 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
31900 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
31910 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
31920 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
31930 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
31940 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
31950 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31960 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
31970 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
31980 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
31990 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
319a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
319b0 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
319c0 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
319d0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
319e0 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
319f0 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20  2 into a RowSet 
31a00 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69  object.** held i
31a10 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
31a20 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
31a30 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
31a40 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
31a50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
31a60 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
31a70 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
31a80 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
31a90 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
31aa0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
31ab0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
31ac0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
31ad0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
31ae0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
31af0 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20  _Blob)==0 ){.   
31b00 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
31b10 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
31b20 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  1) ) goto no_mem
31b30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
31b40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73  sqlite3VdbeMemIs
31b50 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a  RowSet(pIn1) );.
31b60 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
31b70 6e 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70  nsert((RowSet*)p
31b80 49 6e 31 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 75 2e  In1->z, pIn2->u.
31b90 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
31ba0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
31bb0 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a  tRead P1 P2 P3 *
31bc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31bd0 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29  r[P3]=rowset(P1)
31be0 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
31bf0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
31c00 65 20 66 72 6f 6d 20 74 68 65 20 52 6f 77 53 65  e from the RowSe
31c10 74 20 6f 62 6a 65 63 74 20 69 6e 20 50 31 0a 2a  t object in P1.*
31c20 2a 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  * and put that v
31c30 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
31c40 65 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66  er P3..** Or, if
31c50 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 50   RowSet object P
31c60 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
31c70 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
31c80 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
31c90 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
31ca0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
31cb0 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
31cc0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
31cd0 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
31ce0 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
31cf0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
31d00 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
31d10 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
31d20 6c 6f 62 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  lob)==0 || sqlit
31d30 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65  e3VdbeMemIsRowSe
31d40 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 69 66 28  t(pIn1) );.  if(
31d50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
31d60 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 0a 20 20  MEM_Blob)==0 .  
31d70 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
31d80 74 4e 65 78 74 28 28 52 6f 77 53 65 74 2a 29 70  tNext((RowSet*)p
31d90 49 6e 31 2d 3e 7a 2c 20 26 76 61 6c 29 3d 3d 30  In1->z, &val)==0
31da0 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
31db0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
31dc0 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
31dd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
31de0 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
31df0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
31e00 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  1,2);.    goto j
31e10 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
31e20 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
31e30 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
31e40 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
31e50 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
31e60 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65  ndex */.    Vdbe
31e70 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
31e80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
31e90 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
31ea0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
31eb0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
31ec0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
31ed0 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
31ee0 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
31ef0 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
31f00 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
31f10 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
31f20 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31f30 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
31f40 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
31f50 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
31f60 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
31f70 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
31f80 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
31f90 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
31fa0 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
31fb0 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
31fc0 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
31fd0 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
31fe0 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
31ff0 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
32000 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
32010 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
32020 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
32030 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
32040 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
32050 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
32060 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
32070 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73  sets of integers
32080 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64  .** are inserted
32090 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61   in distinct pha
320a0 73 65 73 2c 20 77 68 69 63 68 20 65 61 63 68 20  ses, which each 
320b0 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
320c0 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45  duplicates..** E
320d0 61 63 68 20 73 65 74 20 69 73 20 69 64 65 6e 74  ach set is ident
320e0 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
320f0 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
32100 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
32110 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
32120 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74  e final set must
32130 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e   have P4==-1, an
32140 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20  d for all other 
32150 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76  sets.** must hav
32160 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  e P4>0..**.** Th
32170 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
32180 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
32190 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
321a0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
321b0 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f  .** the RowSet o
321c0 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
321d0 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
321e0 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
321f0 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
32200 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
32210 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
32220 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
32230 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
32240 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
32250 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
32260 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
32270 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
32280 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
32290 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
322a0 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
322b0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
322c0 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
322d0 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
322e0 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
322f0 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
32300 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
32310 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
32320 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
32330 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
32340 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
32350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
32360 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
32370 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
32380 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
32390 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
323a0 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
323b0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
323c0 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
323d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
323e0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
323f0 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
32400 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
32410 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
32420 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
32430 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
32440 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
32450 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
32460 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
32470 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
32480 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
32490 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
324a0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
324b0 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
324c0 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn1) ) goto no_
324d0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
324e0 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  t( sqlite3VdbeMe
324f0 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20  mIsRowSet(pIn1) 
32500 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
32510 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
32520 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
32530 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
32540 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
32550 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
32560 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
32570 65 73 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e  est((RowSet*)pIn
32580 31 2d 3e 7a 2c 20 69 53 65 74 2c 20 70 49 6e 33  1->z, iSet, pIn3
32590 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65  ->u.i);.    Vdbe
325a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73  BranchTaken(exis
325b0 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
325c0 28 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20  ( exists ) goto 
325d0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
325e0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
325f0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
32600 65 74 49 6e 73 65 72 74 28 28 52 6f 77 53 65 74  etInsert((RowSet
32610 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 33 2d  *)pIn1->z, pIn3-
32620 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
32630 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
32640 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
32650 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
32660 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
32670 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
32680 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
32690 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
326a0 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
326b0 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
326c0 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
326d0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
326e0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
326f0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
32700 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
32710 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
32720 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
32730 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
32740 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
32750 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
32760 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
32770 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
32780 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
32790 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
327a0 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
327b0 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
327c0 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
327d0 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
327e0 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
327f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
32800 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
32810 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
32820 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
32830 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
32840 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
32850 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
32860 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
32870 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
32880 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
32890 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
328a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
328b0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
328c0 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61  recursive progra
328d0 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20  m invocation is 
328e0 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65  enabled..*/.case
328f0 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20   OP_Program: {  
32900 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
32910 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
32920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
32930 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72  mber of memory r
32940 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62  egisters for sub
32950 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
32960 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
32970 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
32980 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  f runtime space 
32990 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62  required for sub
329a0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65  -program */.  Me
329b0 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20  m *pRt;         
329c0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
329d0 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75  r to allocate ru
329e0 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20  ntime space */. 
329f0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
32a00 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
32a10 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
32a20 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ugh memory cells
32a30 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b   */.  Mem *pEnd;
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32a50 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c   Last memory cel
32a60 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a  l in new array *
32a70 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
32a80 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  Frame;      /* N
32a90 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f  ew vdbe frame to
32aa0 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20   execute in */. 
32ab0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
32ac0 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d  ogram;   /* Sub-
32ad0 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
32ae0 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b  te */.  void *t;
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66  /* Token identif
32b10 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a  ying trigger */.
32b20 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f  .  pProgram = pO
32b30 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a  p->p4.pProgram;.
32b40 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f    pRt = &aMem[pO
32b50 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
32b60 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
32b70 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
32b80 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
32b90 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
32ba0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
32bb0 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
32bc0 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
32bd0 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
32be0 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
32bf0 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
32c00 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
32c10 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
32c20 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
32c30 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
32c40 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
32c50 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
32c60 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
32c70 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
32c80 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
32c90 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
32ca0 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
32cb0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
32cc0 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
32cd0 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
32ce0 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
32cf0 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
32d00 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
32d10 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
32d20 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
32d30 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
32d40 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
32d50 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
32d60 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
32d70 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
32d80 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
32d90 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
32da0 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
32db0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
32dc0 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
32dd0 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
32de0 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
32df0 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
32e00 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
32e10 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
32e20 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
32e30 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
32e40 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
32e50 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
32e60 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
32e70 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
32e80 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
32e90 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
32ea0 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
32eb0 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
32ec0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
32ed0 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
32ee0 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
32ef0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
32f00 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
32f10 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61  Error(p, "too ma
32f20 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69  ny levels of tri
32f30 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29  gger recursion")
32f40 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
32f50 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
32f60 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
32f70 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
32f80 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
32f90 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
32fa0 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
32fb0 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
32fc0 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
32fd0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
32fe0 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
32ff0 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
33000 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
33010 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
33020 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
33030 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
33040 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
33050 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
33060 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
33070 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
33080 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
33090 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29  >flags&MEM_Blob)
330a0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
330b0 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
330c0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
330d0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
330e0 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
330f0 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
33100 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
33110 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
33120 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
33130 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
33140 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
33150 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
33160 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
33170 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
33180 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
33190 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
331a0 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
331b0 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
331c0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
331d0 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
331e0 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
331f0 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Csr;.    assert(
33200 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69   nMem>0 );.    i
33210 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  f( pProgram->nCs
33220 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20  r==0 ) nMem++;. 
33230 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
33240 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
33250 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
33260 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
33270 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
33280 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
33290 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
332a0 56 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20  VdbeCursor*).   
332b0 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50             + (pP
332c0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29  rogram->nOp + 7)
332d0 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  /8;.    pFrame =
332e0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
332f0 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
33300 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
33310 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
33320 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
33330 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
33340 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
33350 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
33360 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 3b 0a  M_Blob|MEM_Dyn;.
33370 20 20 20 20 70 52 74 2d 3e 7a 20 3d 20 28 63 68      pRt->z = (ch
33380 61 72 2a 29 70 46 72 61 6d 65 3b 0a 20 20 20 20  ar*)pFrame;.    
33390 70 52 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a  pRt->n = nByte;.
333a0 20 20 20 20 70 52 74 2d 3e 78 44 65 6c 20 3d 20      pRt->xDel = 
333b0 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
333c0 4d 65 6d 44 65 6c 3b 0a 0a 20 20 20 20 70 46 72  MemDel;..    pFr
333d0 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20  ame->v = p;.    
333e0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
333f0 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46  m = nMem;.    pF
33400 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
33410 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  = pProgram->nCsr
33420 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63  ;.    pFrame->pc
33430 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
33440 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Op);.    pFrame-
33450 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
33460 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
33470 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
33480 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
33490 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
334a0 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
334b0 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
334c0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
334d0 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
334e0 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
334f0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
33500 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
33510 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c  oken;.#ifdef SQL
33520 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
33530 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70  SCANSTATUS.    p
33540 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20  Frame->anExec = 
33550 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69  p->anExec;.#endi
33560 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
33570 44 45 42 55 47 0a 20 20 20 20 70 46 72 61 6d 65  DEBUG.    pFrame
33580 2d 3e 69 46 72 61 6d 65 4d 61 67 69 63 20 3d 20  ->iFrameMagic = 
33590 53 51 4c 49 54 45 5f 46 52 41 4d 45 5f 4d 41 47  SQLITE_FRAME_MAG
335a0 49 43 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  IC;.#endif..    
335b0 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
335c0 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
335d0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
335e0 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
335f0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
33600 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
33610 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
33620 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
33630 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
33640 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
33650 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
33660 20 20 20 20 70 46 72 61 6d 65 20 3d 20 28 56 64      pFrame = (Vd
33670 62 65 46 72 61 6d 65 2a 29 70 52 74 2d 3e 7a 3b  beFrame*)pRt->z;
33680 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52 74  .    assert( pRt
33690 2d 3e 78 44 65 6c 3d 3d 73 71 6c 69 74 65 33 56  ->xDel==sqlite3V
336a0 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 20 29  dbeFrameMemDel )
336b0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
336c0 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
336d0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
336e0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a  ame->nChildMem .
336f0 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f          || (pPro
33700 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26  gram->nCsr==0 &&
33710 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
33720 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  1==pFrame->nChil
33730 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73  dMem) );.    ass
33740 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
33750 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
33760 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
33770 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20  sert( (int)(pOp 
33780 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e  - aOp)==pFrame->
33790 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
337a0 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
337b0 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
337c0 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
337d0 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  e->lastRowid = d
337e0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
337f0 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
33800 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
33810 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
33820 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
33830 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46  ge;.  assert( pF
33840 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d  rame->pAuxData==
33850 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  0 );.  pFrame->p
33860 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75  AuxData = p->pAu
33870 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78  xData;.  p->pAux
33880 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  Data = 0;.  p->n
33890 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
338a0 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
338b0 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
338c0 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65  em = VdbeFrameMe
338d0 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e  m(pFrame);.  p->
338e0 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
338f0 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
33900 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
33910 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
33920 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
33930 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
33940 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70  em[p->nMem];.  p
33950 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28  Frame->aOnce = (
33960 75 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50  u8*)&p->apCsr[pP
33970 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20  rogram->nCsr];. 
33980 20 6d 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e   memset(pFrame->
33990 61 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67  aOnce, 0, (pProg
339a0 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29  ram->nOp + 7)/8)
339b0 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
339c0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
339d0 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
339e0 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64  ogram->nOp;.#ifd
339f0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
33a00 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
33a10 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30  .  p->anExec = 0
33a20 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
33a30 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 2f  SQLITE_DEBUG.  /
33a40 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 73 65  * Verify that se
33a50 63 6f 6e 64 20 61 6e 64 20 73 75 62 73 65 71 75  cond and subsequ
33a60 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 73 20 6f  ent executions o
33a70 66 20 74 68 65 20 73 61 6d 65 20 74 72 69 67 67  f the same trigg
33a80 65 72 20 64 6f 20 6e 6f 74 0a 20 20 2a 2a 20 74  er do not.  ** t
33a90 72 79 20 74 6f 20 72 65 75 73 65 20 72 65 67 69  ry to reuse regi
33aa0 73 74 65 72 20 76 61 6c 75 65 73 20 66 72 6f 6d  ster values from
33ab0 20 74 68 65 20 66 69 72 73 74 20 75 73 65 2e 20   the first use. 
33ac0 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20 69  */.  {.    int i
33ad0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
33ae0 3c 70 2d 3e 6e 4d 65 6d 3b 20 69 2b 2b 29 7b 0a  <p->nMem; i++){.
33af0 20 20 20 20 20 20 61 4d 65 6d 5b 69 5d 2e 70 53        aMem[i].pS
33b00 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 20 20 2f  copyFrom = 0;  /
33b10 2a 20 50 72 65 76 65 6e 74 20 66 61 6c 73 65 2d  * Prevent false-
33b20 70 6f 73 69 74 69 76 65 20 41 62 6f 75 74 54 6f  positive AboutTo
33b30 43 68 61 6e 67 65 28 29 20 65 72 72 73 20 2a 2f  Change() errs */
33b40 0a 20 20 20 20 20 20 61 4d 65 6d 5b 69 5d 2e 66  .      aMem[i].f
33b50 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 55 6e 64 65  lags |= MEM_Unde
33b60 66 69 6e 65 64 3b 20 2f 2a 20 43 61 75 73 65 20  fined; /* Cause 
33b70 61 20 66 61 75 6c 74 20 69 66 20 74 68 69 73 20  a fault if this 
33b80 72 65 67 20 69 73 20 72 65 75 73 65 64 20 2a 2f  reg is reused */
33b90 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
33ba0 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d  f.  pOp = &aOp[-
33bb0 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  1];..  break;.}.
33bc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
33bd0 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
33be0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
33bf0 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
33c00 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
33c10 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
33c20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
33c30 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
33c40 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
33c50 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
33c60 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
33c70 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
33c80 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
33c90 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
33ca0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
33cb0 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
33cc0 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
33cd0 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
33ce0 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
33cf0 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
33d00 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
33d10 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
33d20 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
33d30 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
33d40 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
33d50 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
33d60 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
33d70 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
33d80 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
33d90 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
33da0 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
33db0 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
33dc0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
33dd0 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
33de0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
33df0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
33e00 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
33e10 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
33e20 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
33e30 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
33e40 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
33e50 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
33e60 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
33e70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
33e80 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
33e90 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
33ea0 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
33eb0 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
33ec0 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
33ed0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33ee0 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
33ef0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33f00 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
33f10 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
33f20 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
33f30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
33f40 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
33f50 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
33f60 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
33f70 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
33f80 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
33f90 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
33fa0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
33fb0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
33fc0 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
33fd0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
33fe0 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
33ff0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
34000 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
34010 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
34020 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
34030 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
34040 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
34050 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
34060 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
34070 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
34080 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
34090 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
340a0 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
340b0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
340c0 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
340d0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
340e0 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
340f0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
34100 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
34110 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
34120 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
34130 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
34140 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
34150 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
34160 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
34170 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
34180 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
34190 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
341a0 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
341b0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
341c0 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
341d0 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
341e0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
341f0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
34200 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
34210 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
34220 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
34230 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
34240 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
34250 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
34260 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
34270 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
34280 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
34290 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
342a0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
342b0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
342c0 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
342d0 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
342e0 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
342f0 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
34300 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
34310 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
34320 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
34330 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
34340 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
34350 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
34360 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
34370 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
34380 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
34390 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
343a0 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
343b0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
343c0 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
343d0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
343e0 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
343f0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
34400 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
34410 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
34420 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
34430 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
34440 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
34450 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
34460 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e  2);.    if( p->n
34470 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
34480 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
34490 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
344a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
344b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
344c0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
344d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
344e0 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
344f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
34500 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
34510 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
34520 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
34530 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
34540 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
34550 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
34560 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
34570 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
34580 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
34590 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
345a0 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
345b0 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
345c0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
345d0 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
345e0 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
345f0 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
34600 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
34610 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
34620 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
34630 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
34640 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
34650 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
34660 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
34670 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
34680 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
34690 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
346a0 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
346b0 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
346c0 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
346d0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
346e0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
346f0 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
34700 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
34710 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
34720 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
34730 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
34740 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
34750 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
34760 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
34770 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
34780 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
34790 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
347a0 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
347b0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
347c0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
347d0 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
347e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
347f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
34800 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
34810 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
34820 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
34830 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
34840 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
34850 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
34860 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
34870 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
34880 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
34890 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
348a0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
348b0 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50  >0 then r[P1]-=P
348c0 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3, goto P2.**.**
348d0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
348e0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
348f0 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20  eger..** If the 
34900 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
34910 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
34920 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50  ater, subtract P
34930 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61  3 from the.** va
34940 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75  lue in P1 and ju
34950 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
34960 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76  If the initial v
34970 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
34980 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
34990 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20   1, then the.** 
349a0 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67  value is unchang
349b0 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70  ed and control p
349c0 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f  asses through to
349d0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
349e0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
349f0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
34a00 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
34a10 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
34a20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
34a30 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
34a40 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
34a50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
34a60 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
34a70 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
34a80 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  0 ){.    pIn1->u
34a90 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i -= pOp->p3;. 
34aa0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
34ab0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
34ac0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
34ad0 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32  ffsetLimit P1 P2
34ae0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
34af0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
34b00 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  then r[P2]=r[P1]
34b10 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c  +max(0,r[P3]) el
34b20 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a  se r[P2]=(-1).**
34b30 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
34b40 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f  performs a commo
34b50 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61  nly used computa
34b60 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
34b70 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e  with.** LIMIT an
34b80 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73  d OFFSET process
34b90 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74  .  r[P1] holds t
34ba0 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72  he limit counter
34bb0 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64  .  r[P3].** hold
34bc0 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75  s the offset cou
34bd0 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64  nter.  The opcod
34be0 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63  e computes the c
34bf0 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a  ombined value.**
34c00 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e   of the LIMIT an
34c10 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f  d OFFSET and sto
34c20 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69  res that value i
34c30 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b  n r[P2].  The r[
34c40 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d  P2].** value com
34c50 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74  puted is the tot
34c60 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
34c70 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64  s that will need
34c80 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65   to be.** visite
34c90 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  d in order to co
34ca0 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79  mplete the query
34cb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d  ..**.** If r[P3]
34cc0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
34cd0 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
34ce0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46   there is no OFF
34cf0 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  SET.** and r[P2]
34d00 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
34d10 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
34d20 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a  IMIT, r[P1]..**.
34d30 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a  ** if r[P1] is z
34d40 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
34d50 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
34d60 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a  e is no LIMIT.**
34d70 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
34d80 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20  t to -1. .**.** 
34d90 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d  Otherwise, r[P2]
34da0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73   is set to the s
34db0 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20  um of r[P1] and 
34dc0 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  r[P3]..*/.case O
34dd0 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b  P_OffsetLimit: {
34de0 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
34df0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78  , in3 */.  i64 x
34e00 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
34e10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
34e20 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
34e30 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  3];.  pOut = out
34e40 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
34e50 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
34e60 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
34e70 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
34e80 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
34e90 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d  MEM_Int );.  x =
34ea0 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66   pIn1->u.i;.  if
34eb0 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65  ( x<=0 || sqlite
34ec0 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49  3AddInt64(&x, pI
34ed0 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e  n3->u.i>0?pIn3->
34ee0 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a  u.i:0) ){.    /*
34ef0 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73   If the LIMIT is
34f00 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
34f10 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f  ual to zero, loo
34f20 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
34f30 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d  .    ** is docum
34f40 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f  ented.  But also
34f50 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f  , if the LIMIT+O
34f60 46 46 53 45 54 20 65 78 63 65 65 64 73 20 32 5e  FFSET exceeds 2^
34f70 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61  63 then.    ** a
34f80 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72  lso loop forever
34f90 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
34fa0 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63  umented.  In fac
34fb0 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67  t, one could arg
34fc0 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ue.    ** that t
34fd0 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74  he loop should t
34fe0 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61  erminate.  But a
34ff0 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f  ssuming 1 billio
35000 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20  n iterations.   
35010 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28   ** per second (
35020 66 61 72 20 65 78 63 65 65 64 69 6e 67 20 74 68  far exceeding th
35030 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f  e capabilities o
35040 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61  f any current ha
35050 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69  rdware).    ** i
35060 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61  t would take nea
35070 72 6c 79 20 33 30 30 20 79 65 61 72 73 20 74 6f  rly 300 years to
35080 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20   actually reach 
35090 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20  the limit.  So. 
350a0 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f     ** looping fo
350b0 72 65 76 65 72 20 69 73 20 61 20 72 65 61 73 6f  rever is a reaso
350c0 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74  nable approximat
350d0 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74  ion. */.    pOut
350e0 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65  ->u.i = -1;.  }e
350f0 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
35100 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72  .i = x;.  }.  br
35110 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
35120 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20  e: IfNotZero P1 
35130 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
35140 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
35150 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20  0 then r[P1]--, 
35160 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
35170 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
35180 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
35190 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65  r.  If the conte
351a0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
351b0 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c  1 is.** initiall
351c0 79 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  y greater than z
351d0 65 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d  ero, then decrem
351e0 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
351f0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
35200 20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65   If it is non-ze
35210 72 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20  ro (negative or 
35220 70 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74 68  positive) and th
35230 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20  en also jump to 
35240 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69  P2.  .** If regi
35250 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
35260 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65  ally zero, leave
35270 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   it unchanged an
35280 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
35290 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
352a0 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
352b0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
352c0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
352d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
352e0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
352f0 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
35300 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
35310 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
35320 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
35330 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e      if( pIn1->u.
35340 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d  i>0 ) pIn1->u.i-
35350 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  -;.     goto jum
35360 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
35370 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
35380 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
35390 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
353a0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
353b0 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
353c0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
353d0 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
353e0 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
353f0 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
35400 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70  n P1.** and jump
35410 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65   to P2 if the ne
35420 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74  w value is exact
35430 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  ly zero..*/.case
35440 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f   OP_DecrJumpZero
35450 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  : {      /* jump
35460 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
35470 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
35480 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
35490 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
354a0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
354b0 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  .i>SMALLEST_INT6
354c0 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  4 ) pIn1->u.i--;
354d0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
354e0 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
354f0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
35500 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  >u.i==0 ) goto j
35510 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
35520 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
35530 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
35540 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
35550 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
35560 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
35570 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
35580 68 65 20 78 53 74 65 70 20 66 75 6e 63 74 69 6f  he xStep functio
35590 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
355a0 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74  te..** The funct
355b0 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
355c0 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20 70  ents.  P4 is a p
355d0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a  ointer to the .*
355e0 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  * FuncDef struct
355f0 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
35600 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
35610 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
35620 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61   the.** accumula
35630 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
35640 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
35650 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
35660 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
35670 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
35680 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 49  ./* Opcode: AggI
35690 6e 76 65 72 73 65 20 2a 20 50 32 20 50 33 20 50  nverse * P2 P3 P
356a0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
356b0 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 69 6e  : accum=r[P3] in
356c0 76 65 72 73 65 28 72 5b 50 32 40 50 35 5d 29 0a  verse(r[P2@P5]).
356d0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
356e0 65 20 78 49 6e 76 65 72 73 65 20 66 75 6e 63 74  e xInverse funct
356f0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
35700 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e  gate..** The fun
35710 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
35720 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61  uments.  P4 is a
35730 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
35740 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75  .** FuncDef stru
35750 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
35760 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
35770 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  n.  Register P3 
35780 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75  is the.** accumu
35790 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
357a0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
357b0 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
357c0 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
357d0 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
357e0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  */./* Opcode: Ag
357f0 67 53 74 65 70 31 20 50 31 20 50 32 20 50 33 20  gStep1 P1 P2 P3 
35800 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
35810 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
35820 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
35830 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
35840 78 53 74 65 70 20 28 69 66 20 50 31 3d 3d 30 29  xStep (if P1==0)
35850 20 6f 72 20 78 49 6e 76 65 72 73 65 20 28 69 66   or xInverse (if
35860 20 50 31 21 3d 30 29 20 66 75 6e 63 74 69 6f 6e   P1!=0) function
35870 20 66 6f 72 20 61 6e 0a 2a 2a 20 61 67 67 72 65   for an.** aggre
35880 67 61 74 65 2e 20 20 54 68 65 20 66 75 6e 63 74  gate.  The funct
35890 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
358a0 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20 70  ents.  P4 is a p
358b0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a  ointer to the .*
358c0 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  * FuncDef struct
358d0 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
358e0 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
358f0 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
35900 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61   the.** accumula
35910 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
35920 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
35930 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
35940 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
35950 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a  * successors..**
35960 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
35970 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64  is initially cod
35980 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70  ed as OP_AggStep
35990 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61  0.  On first eva
359a0 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20  luation,.** the 
359b0 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69  FuncDef stored i
359c0 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65  n P4 is converte
359d0 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65  d into an sqlite
359e0 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a  3_context and.**
359f0 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63   the opcode is c
35a00 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73  hanged.  In this
35a10 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61   way, the initia
35a20 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  lization of the.
35a30 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ** sqlite3_conte
35a40 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20  xt only happens 
35a50 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66  once, instead of
35a60 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f   on each call to
35a70 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e   the.** step fun
35a80 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
35a90 50 5f 41 67 67 49 6e 76 65 72 73 65 3a 0a 63 61  P_AggInverse:.ca
35aa0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
35ab0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69  .  int n;.  sqli
35ac0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
35ad0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
35ae0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
35af0 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70  NCDEF );.  n = p
35b00 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
35b10 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
35b20 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
35b30 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
35b40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d   );.  assert( n=
35b50 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
35b60 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28   && pOp->p2+n<=(
35b70 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
35b80 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20  Cursor)+1) );.  
35b90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
35ba0 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e  pOp->p2 || pOp->
35bb0 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b  p3>=pOp->p2+n );
35bc0 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65  .  pCtx = sqlite
35bd0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64  3DbMallocRawNN(d
35be0 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71 6c 69  b, n*sizeof(sqli
35bf0 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a 20 20  te3_value*) +.  
35c00 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69               (si
35c10 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29 20 2b 20  zeof(pCtx[0]) + 
35c20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20 73 69  sizeof(Mem) - si
35c30 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
35c40 75 65 2a 29 29 29 3b 0a 20 20 69 66 28 20 70 43  ue*)));.  if( pC
35c50 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
35c60 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65  mem;.  pCtx->pMe
35c70 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  m = 0;.  pCtx->p
35c80 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28 70 43  Out = (Mem*)&(pC
35c90 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a 20 20  tx->argv[n]);.  
35ca0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
35cb0 69 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 64  it(pCtx->pOut, d
35cc0 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  b, MEM_Null);.  
35cd0 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
35ce0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
35cf0 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
35d00 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
35d10 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
35d20 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67    pCtx->skipFlag
35d30 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 69 73   = 0;.  pCtx->is
35d40 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70 43 74  Error = 0;.  pCt
35d50 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
35d60 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
35d70 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
35d80 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
35d90 0a 20 20 2f 2a 20 4f 50 5f 41 67 67 49 6e 76 65  .  /* OP_AggInve
35da0 72 73 65 20 6d 75 73 74 20 68 61 76 65 20 50 31  rse must have P1
35db0 3d 3d 31 20 61 6e 64 20 4f 50 5f 41 67 67 53 74  ==1 and OP_AggSt
35dc0 65 70 20 6d 75 73 74 20 68 61 76 65 20 50 31 3d  ep must have P1=
35dd0 3d 30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  =0 */.  assert( 
35de0 70 4f 70 2d 3e 70 31 3d 3d 28 70 4f 70 2d 3e 6f  pOp->p1==(pOp->o
35df0 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 49 6e 76  pcode==OP_AggInv
35e00 65 72 73 65 29 20 29 3b 0a 0a 20 20 70 4f 70 2d  erse) );..  pOp-
35e10 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67  >opcode = OP_Agg
35e20 53 74 65 70 31 3b 0a 20 20 2f 2a 20 46 61 6c 6c  Step1;.  /* Fall
35e30 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
35e40 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61  _AggStep */.}.ca
35e50 73 65 20 4f 50 5f 41 67 67 53 74 65 70 31 3a 20  se OP_AggStep1: 
35e60 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  {.  int i;.  sql
35e70 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
35e80 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  tx;.  Mem *pMem;
35e90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
35ea0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
35eb0 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  CTX );.  pCtx = 
35ec0 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20  pOp->p4.pCtx;.  
35ed0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
35ee0 2d 3e 70 33 5d 3b 0a 0a 23 69 66 64 65 66 20 53  ->p3];..#ifdef S
35ef0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
35f00 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
35f10 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f   /* This is an O
35f20 50 5f 41 67 67 49 6e 76 65 72 73 65 20 63 61 6c  P_AggInverse cal
35f30 6c 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20  l.  Verify that 
35f40 78 53 74 65 70 20 68 61 73 20 61 6c 77 61 79 73  xStep has always
35f50 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 61 6c  .    ** been cal
35f60 6c 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63  led at least onc
35f70 65 20 70 72 69 6f 72 20 74 6f 20 61 6e 79 20 78  e prior to any x
35f80 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 2a 2f  Inverse call. */
35f90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65  .    assert( pMe
35fa0 6d 2d 3e 75 54 65 6d 70 3d 3d 30 78 31 31 32 32  m->uTemp==0x1122
35fb0 65 30 65 33 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  e0e3 );.  }else{
35fc0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
35fd0 61 6e 20 4f 50 5f 41 67 67 53 74 65 70 20 63 61  an OP_AggStep ca
35fe0 6c 6c 2e 20 20 4d 61 72 6b 20 69 74 20 61 73 20  ll.  Mark it as 
35ff0 73 75 63 68 2e 20 2a 2f 0a 20 20 20 20 70 4d 65  such. */.    pMe
36000 6d 2d 3e 75 54 65 6d 70 20 3d 20 30 78 31 31 32  m->uTemp = 0x112
36010 32 65 30 65 33 3b 0a 20 20 7d 0a 23 65 6e 64 69  2e0e3;.  }.#endi
36020 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
36030 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
36040 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
36050 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
36060 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
36070 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
36080 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
36090 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
360a0 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
360b0 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
360c0 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
360d0 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
360e0 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
360f0 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
36100 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
36110 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
36120 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
36130 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
36140 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  */.  if( pCtx->p
36150 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20  Mem != pMem ){. 
36160 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20     pCtx->pMem = 
36170 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  pMem;.    for(i=
36180 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e  pCtx->argc-1; i>
36190 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61  =0; i--) pCtx->a
361a0 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70  rgv[i] = &aMem[p
361b0 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a  Op->p2+i];.  }..
361c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
361d0 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  BUG.  for(i=0; i
361e0 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b  <pCtx->argc; i++
361f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
36200 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e  emIsValid(pCtx->
36210 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20  argv[i]) );.    
36220 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
36230 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e  Op->p2+i, pCtx->
36240 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65  argv[i]);.  }.#e
36250 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  ndif..  pMem->n+
36260 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74  +;.  assert( pCt
36270 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d  x->pOut->flags==
36280 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73  MEM_Null );.  as
36290 73 65 72 74 28 20 70 43 74 78 2d 3e 69 73 45 72  sert( pCtx->isEr
362a0 72 6f 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ror==0 );.  asse
362b0 72 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  rt( pCtx->skipFl
362c0 61 67 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  ag==0 );.#ifndef
362d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
362e0 44 4f 57 46 55 4e 43 0a 20 20 69 66 28 20 70 4f  DOWFUNC.  if( pO
362f0 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 28 70 43  p->p1 ){.    (pC
36300 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 49 6e 76 65  tx->pFunc->xInve
36310 72 73 65 29 28 70 43 74 78 2c 70 43 74 78 2d 3e  rse)(pCtx,pCtx->
36320 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29  argc,pCtx->argv)
36330 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
36340 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d  .  (pCtx->pFunc-
36350 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43  >xSFunc)(pCtx,pC
36360 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61  tx->argc,pCtx->a
36370 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  rgv); /* IMP: R-
36380 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 0a  24505-23230 */..
36390 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
363a0 72 6f 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ror ){.    if( p
363b0 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e 30 20 29  Ctx->isError>0 )
363c0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
363d0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
363e0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
363f0 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
36400 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
36410 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
36420 20 7d 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d   }.    if( pCtx-
36430 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20  >skipFlag ){.   
36440 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
36450 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
36460 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 20 20 69  llSeq );.      i
36470 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
36480 20 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c       if( i ) sql
36490 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
364a0 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
364b0 3b 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 73 6b  ;.      pCtx->sk
364c0 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 20 20  ipFlag = 0;.    
364d0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
364e0 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 43 74 78  eMemRelease(pCtx
364f0 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20 70 43 74  ->pOut);.    pCt
36500 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  x->pOut->flags =
36510 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 70   MEM_Null;.    p
36520 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30  Ctx->isError = 0
36530 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
36540 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
36550 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
36560 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74  sert( pCtx->pOut
36570 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  ->flags==MEM_Nul
36580 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  l );.  assert( p
36590 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30  Ctx->skipFlag==0
365a0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
365b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
365c0 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
365d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
365e0 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
365f0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 6d  *.** P1 is the m
36600 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
36610 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
36620 75 6c 61 74 6f 72 20 66 6f 72 20 61 6e 20 61 67  ulator for an ag
36630 67 72 65 67 61 74 65 0a 2a 2a 20 6f 72 20 77 69  gregate.** or wi
36640 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 20 20  ndow function.  
36650 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
36660 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 0a  lizer function .
36670 2a 2a 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  ** for an aggreg
36680 61 74 65 20 61 6e 64 20 73 74 6f 72 65 20 74 68  ate and store th
36690 65 20 72 65 73 75 6c 74 20 69 6e 20 50 31 2e 0a  e result in P1..
366a0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
366b0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
366c0 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
366d0 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
366e0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
366f0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
36700 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
36710 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
36720 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
36730 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
36740 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
36750 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
36760 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
36770 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
36780 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
36790 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
367a0 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
367b0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
367c0 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
367d0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
367e0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
367f0 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
36800 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 2f 2a  ly called..*/./*
36810 20 4f 70 63 6f 64 65 3a 20 41 67 67 56 61 6c 75   Opcode: AggValu
36820 65 20 2a 20 50 32 20 50 33 20 50 34 20 2a 0a 2a  e * P2 P3 P4 *.*
36830 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
36840 5d 3d 76 61 6c 75 65 20 4e 3d 50 32 0a 2a 2a 0a  ]=value N=P2.**.
36850 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 56  ** Invoke the xV
36860 61 6c 75 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  alue() function 
36870 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
36880 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
36890 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73   P3..**.** P2 is
368a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
368b0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
368c0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
368d0 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
368e0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
368f0 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
36900 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
36910 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
36920 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
36930 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
36940 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
36950 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
36960 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
36970 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
36980 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
36990 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
369a0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
369b0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
369c0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 0a   the case where.
369d0 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
369e0 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
369f0 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
36a00 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 56 61  */.case OP_AggVa
36a10 6c 75 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67  lue:.case OP_Agg
36a20 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
36a30 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
36a40 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
36a50 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
36a60 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
36a70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
36a80 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  >p3==0 || pOp->o
36a90 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 56 61 6c  pcode==OP_AggVal
36aa0 75 65 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  ue );.  pMem = &
36ab0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
36ac0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
36ad0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
36ae0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
36af0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
36b00 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
36b10 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20  C.  if( pOp->p3 
36b20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
36b30 74 65 33 56 64 62 65 4d 65 6d 41 67 67 56 61 6c  te3VdbeMemAggVal
36b40 75 65 28 70 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70  ue(pMem, &aMem[p
36b50 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70 2d 3e 70 34  Op->p3], pOp->p4
36b60 2e 70 46 75 6e 63 29 3b 0a 20 20 20 20 70 4d 65  .pFunc);.    pMe
36b70 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
36b80 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64  3];.  }else.#end
36b90 69 66 0a 20 20 7b 0a 20 20 20 20 72 63 20 3d 20  if.  {.    rc = 
36ba0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
36bb0 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
36bc0 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 7d  ->p4.pFunc);.  }
36bd0 0a 20 20 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  .  .  if( rc ){.
36be0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
36bf0 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
36c00 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
36c10 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74  (pMem));.    got
36c20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36c30 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
36c40 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
36c50 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
36c60 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
36c70 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
36c80 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
36c90 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
36ca0 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
36cb0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
36cc0 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
36cd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
36ce0 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65  L./* Opcode: Che
36cf0 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33  ckpoint P1 P2 P3
36d00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
36d10 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50  point database P
36d20 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d  1. This is a no-
36d30 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20  op if P1 is not 
36d40 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20  currently in.** 
36d50 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65  WAL mode. Parame
36d60 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66  ter P2 is one of
36d70 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
36d80 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c  NT_PASSIVE, FULL
36d90 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72  ,.** RESTART, or
36da0 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74   TRUNCATE.  Writ
36db0 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65  e 1 or 0 into me
36dc0 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65  m[P3] if the che
36dd0 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a  ckpoint returns.
36de0 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f  ** SQLITE_BUSY o
36df0 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76  r not, respectiv
36e00 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20  ely.  Write the 
36e10 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
36e20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66  in the.** WAL af
36e30 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
36e40 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31  nt into mem[P3+1
36e50 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  ] and the number
36e60 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20   of pages.** in 
36e70 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76  the WAL that hav
36e80 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e  e been checkpoin
36e90 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68  ted after the ch
36ea0 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70  eckpoint.** comp
36eb0 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50  letes into mem[P
36ec0 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f  3+2].  However o
36ed0 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b  n an error, mem[
36ee0 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d  P3+1] and.** mem
36ef0 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69  [P3+2] are initi
36f00 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f  alized to -1..*/
36f10 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f  .case OP_Checkpo
36f20 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20  int: {.  int i; 
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f40 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
36f50 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e   counter */.  in
36f60 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20  t aRes[3];      
36f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
36f80 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65   Results */.  Me
36f90 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
36fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
36fb0 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68   Write results h
36fc0 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ere */..  assert
36fd0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
36fe0 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20   );.  aRes[0] = 
36ff0 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61  0;.  aRes[1] = a
37000 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61  Res[2] = -1;.  a
37010 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
37020 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
37030 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20  T_PASSIVE.      
37040 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
37050 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
37060 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ULL.       || pO
37070 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
37080 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54  ECKPOINT_RESTART
37090 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
370a0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
370b0 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20  POINT_TRUNCATE. 
370c0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
370d0 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  e3Checkpoint(db,
370e0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
370f0 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52  2, &aRes[1], &aR
37100 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63  es[2]);.  if( rc
37110 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   ){.    if( rc!=
37120 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f  SQLITE_BUSY ) go
37130 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
37140 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20  error;.    rc = 
37150 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61  SQLITE_OK;.    a
37160 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a  Res[0] = 1;.  }.
37170 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20    for(i=0, pMem 
37180 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
37190 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d  ; i<3; i++, pMem
371a0 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
371b0 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
371c0 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b  pMem, (i64)aRes[
371d0 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62  i]);.  }    .  b
371e0 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69  reak;.};  .#endi
371f0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
37200 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a  E_OMIT_PRAGMA./*
37210 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c   Opcode: Journal
37220 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  Mode P1 P2 P3 * 
37230 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  *.**.** Change t
37240 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
37250 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
37260 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
37270 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
37280 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37290 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
372a0 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
372b0 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
372c0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
372d0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
372e0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
372f0 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
37300 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
37310 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
37320 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
37330 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
37340 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
37350 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
37360 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
37370 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
37380 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
37390 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
373a0 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
373b0 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
373c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
373d0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
373e0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65  * out2 */.  Btre
373f0 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
37400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
37410 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a  tree to change j
37420 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a  ournal mode of *
37430 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  /.  Pager *pPage
37440 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
37450 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73      /* Pager ass
37460 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74  ociated with pBt
37470 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20   */.  int eNew; 
37480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37490 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75        /* New jou
374a0 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69  rnal mode */.  i
374b0 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20  nt eOld;        
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
374d0 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61  * The old journa
374e0 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65  l mode */.#ifnde
374f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
37500 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  L.  const char *
37510 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20  zFilename;      
37520 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64      /* Name of d
37530 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
37540 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69   pPager */.#endi
37550 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  f..  pOut = out2
37560 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
37570 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70  p);.  eNew = pOp
37580 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
37590 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
375a0 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a  NALMODE_DELETE .
375b0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
375c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
375d0 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20  E_TRUNCATE .    
375e0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
375f0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
37600 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c  RSIST .       ||
37610 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
37620 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20  RNALMODE_OFF.   
37630 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
37640 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
37650 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20  EMORY.       || 
37660 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
37670 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20  NALMODE_WAL.    
37680 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
37690 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
376a0 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ERY.  );.  asser
376b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
376c0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
376d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
376e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
376f0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
37700 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
37710 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
37720 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
37730 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74  ;.  eOld = sqlit
37740 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61  e3PagerGetJourna
37750 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20  lMode(pPager);. 
37760 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
37770 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
37780 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  RY ) eNew = eOld
37790 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  ;.  if( !sqlite3
377a0 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a  PagerOkToChangeJ
377b0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
377c0 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  r) ) eNew = eOld
377d0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
377e0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69  E_OMIT_WAL.  zFi
377f0 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  lename = sqlite3
37800 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50  PagerFilename(pP
37810 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20  ager, 1);..  /* 
37820 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74  Do not allow a t
37830 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75  ransition to jou
37840 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f  rnal_mode=WAL fo
37850 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  r a database.  *
37860 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73  * in temporary s
37870 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65  torage or if the
37880 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75   VFS does not su
37890 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d  pport shared mem
378a0 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ory .  */.  if( 
378b0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
378c0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26  NALMODE_WAL.   &
378d0 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  & (sqlite3Strlen
378e0 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30  30(zFilename)==0
378f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
37900 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20  mp file */.     
37910 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67    || !sqlite3Pag
37920 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70  erWalSupported(p
37930 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20  Pager))   /* No 
37940 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75  shared-memory su
37950 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20  pport */.  ){.  
37960 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20    eNew = eOld;. 
37970 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21   }..  if( (eNew!
37980 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f  =eOld).   && (eO
37990 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
379a0 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65  LMODE_WAL || eNe
379b0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
379c0 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20  MODE_WAL).  ){. 
379d0 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
379e0 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56  Commit || db->nV
379f0 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20  dbeRead>1 ){.   
37a00 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
37a10 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
37a20 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
37a30 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
37a40 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
37a50 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
37a60 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
37a70 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
37a80 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37a90 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
37aa0 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
37ab0 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f     );.      goto
37ac0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
37ad0 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
37ae0 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64   .      if( eOld
37af0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37b00 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20  ODE_WAL ){.     
37b10 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67     /* If leaving
37b20 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65   WAL mode, close
37b30 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49   the log file. I
37b40 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  f successful, th
37b50 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a  e call.        *
37b60 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57  * to PagerCloseW
37b70 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73  al() checkpoints
37b80 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65   and deletes the
37b90 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67   write-ahead-log
37ba0 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c   .        ** fil
37bb0 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20  e. An EXCLUSIVE 
37bc0 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62  lock may still b
37bd0 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61  e held on the da
37be0 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20  tabase file .   
37bf0 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20       ** after a 
37c00 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72  successful retur
37c10 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  n. .        */. 
37c20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
37c30 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  te3PagerCloseWal
37c40 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20 20  (pPager, db);.  
37c50 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
37c60 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
37c70 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
37c80 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
37c90 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
37ca0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
37cb0 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
37cc0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37cd0 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
37ce0 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
37cf0 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
37d00 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
37d10 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
37d20 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
37d30 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
37d40 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
37d50 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
37d60 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
37d70 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37d80 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
37d90 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
37da0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
37db0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
37dc0 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
37dd0 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
37de0 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
37df0 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
37e00 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
37e10 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
37e20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
37e30 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
37e40 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
37e50 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
37e60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
37e70 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
37e80 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
37e90 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
37ea0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37eb0 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
37ec0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
37ed0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
37ee0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
37ef0 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
37f00 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  c ) eNew = eOld;
37f10 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  eNew = sqlite
37f20 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
37f30 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
37f40 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  w);..  pOut->fla
37f50 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
37f60 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
37f70 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63  ;.  pOut->z = (c
37f80 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75  har *)sqlite3Jou
37f90 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65  rnalModename(eNe
37fa0 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  w);.  pOut->n = 
37fb0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
37fc0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74  pOut->z);.  pOut
37fd0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
37fe0 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  TF8;.  sqlite3Vd
37ff0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
38000 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
38010 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
38020 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
38030 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
38040 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
38050 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
38060 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
38070 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
38080 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
38090 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
380a0 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
380b0 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
380c0 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
380d0 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
380e0 73 65 20 50 31 2e 20 20 50 31 20 69 73 20 30 20  se P1.  P1 is 0 
380f0 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20  for "main", and 
38100 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72  2 or more.** for
38110 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
38120 61 62 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d  abase.  The "tem
38130 70 22 20 64 61 74 61 62 61 73 65 20 6d 61 79 20  p" database may 
38140 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e  not be vacuumed.
38150 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
38160 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
38170 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  t is a register 
38180 68 6f 6c 64 69 6e 67 20 61 20 73 74 72 69 6e 67  holding a string
38190 20 77 68 69 63 68 20 69 73 0a 2a 2a 20 74 68 65   which is.** the
381a0 20 66 69 6c 65 20 69 6e 74 6f 20 77 68 69 63 68   file into which
381b0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 76   the result of v
381c0 61 63 75 75 6d 20 73 68 6f 75 6c 64 20 62 65 20  acuum should be 
381d0 77 72 69 74 74 65 6e 2e 20 20 57 68 65 6e 0a 2a  written.  When.*
381e0 2a 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  * P2 is zero, th
381f0 65 20 76 61 63 75 75 6d 20 6f 76 65 72 77 72 69  e vacuum overwri
38200 74 65 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  tes the original
38210 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 63 61   database..*/.ca
38220 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a  se OP_Vacuum: {.
38230 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
38240 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63  dOnly==0 );.  rc
38250 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
38260 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
38270 20 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 0a 20 20   db, pOp->p1,.  
38280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38290 20 20 20 20 20 20 70 4f 70 2d 3e 70 32 20 3f 20        pOp->p2 ? 
382a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 20 3a  &aMem[pOp->p2] :
382b0 20 30 29 3b 0a 20 20 69 6