/ Hex Artifact Content
Login

Artifact 9bac2bc2313ed682e6f48ccff6644d3263341885bfcbb3cdea7b720c722be2d5:


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 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
3740: 73 72 2b 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73  sr++) = c;.    s
3750: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3760: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22  100, zCsr, "%d["
3770: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3780: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3790: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
37a0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
37b0: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
37c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
37d0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
37e0: 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28   zCsr, "%02X", (
37f0: 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20  (int)pMem->z[i] 
3800: 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20  & 0xFF));.      
3810: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3820: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3830: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
3840: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3850: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3860: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
3870: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
3880: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
3890: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
38a0: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
38b0: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  + = z;.    }.   
38c0: 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27   *(zCsr++) = ']'
38d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
38e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
38f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3900: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3910: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3920: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3930: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3940: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3950: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3960: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3970: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3980: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3990: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
39a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
39b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
39c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
39d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
39e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
39f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3a00: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3a10: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3a20: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3a30: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3a40: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3a50: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3a60: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3a70: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3a80: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3a90: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3aa0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3ab0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
3ac0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3ad0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
3ae0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3af0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3b00: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3b10: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3b20: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3b30: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3b40: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3b50: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3b60: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3b70: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3b80: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3b90: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
3ba0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
3bb0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
3bc0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
3bd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3be0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3bf0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3c00: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3c10: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3c20: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3c30: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3c40: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3c50: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3c60: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3c70: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3c80: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3c90: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3ca0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3cb0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
3cc0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
3cd0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
3ce0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3cf0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3d00: 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  nt(Mem *p){.  if
3d10: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3d20: 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20  _Undefined ){.  
3d30: 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66    printf(" undef
3d40: 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20  ined");.  }else 
3d50: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3d60: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
3d70: 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a  rintf(" NULL");.
3d80: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
3d90: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
3da0: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d  |MEM_Str))==(MEM
3db0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  _Int|MEM_Str) ){
3dc0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69  .    printf(" si
3dd0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3de0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3df0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3e00: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3e10: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
3e30: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e40: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3e50: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3e60: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
3e70: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75  tf(" r:%g", p->u
3e80: 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  .r);.#endif.  }e
3e90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ea0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
3eb0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
3ec0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3ed0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3ee0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3ef0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3f00: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3f10: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3f20: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66   zBuf);.  }.  if
3f30: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3f40: 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74  _Subtype ) print
3f50: 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30  f(" subtype=0x%0
3f60: 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65  2x", p->eSubtype
3f70: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
3f80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3f90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3fa0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3fb0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3fc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3fd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3fe0: 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ");.  sqlite3Vdb
3ff0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
4000: 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66  nts(p);.}.#endif
4010: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
4020: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
4030: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
4040: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
4050: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
4060: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
4070: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
4080: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
4090: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
40a0: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
40b0: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
40c0: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
40d0: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
40e0: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
40f0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
4100: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
4110: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
4120: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
4130: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
4140: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
4150: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
4160: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
4170: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
4180: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
4190: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
41a0: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
41b0: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
41c0: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
41d0: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
41e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
41f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
4200: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
4210: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
4220: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
4230: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
4240: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4250: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4260: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4270: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4280: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4290: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
42a0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
42b0: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
42c0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
42d0: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
42e0: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
42f0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
4300: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
4310: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
4320: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
4330: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
4340: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4350: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4360: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4370: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4380: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4390: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
43a0: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
43b0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
43c0: 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  tic SQLITE_NOINL
43d0: 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65  INE Mem *out2Pre
43e0: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
43f0: 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73  (Mem *pOut){.  s
4400: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4410: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f  Null(pOut);.  pO
4420: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
4430: 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Int;.  return pO
4440: 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d  ut;.}.static Mem
4450: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4460: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4470: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4480: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4490: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
44a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
44b0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
44c0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
44d0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
44e0: 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
44f0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
4500: 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65  t);.  if( VdbeMe
4510: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
4520: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
4530: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
4540: 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65  return out2Prere
4550: 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70  leaseWithClear(p
4560: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
4570: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
4580: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65   MEM_Int;.    re
4590: 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d  turn pOut;.  }.}
45a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
45b0: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
45c0: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
45d0: 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73   can..** This is
45e0: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c   the core of sql
45f0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a  ite3_step().  .*
4600: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
4610: 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70  eExec(.  Vdbe *p
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
4640: 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20  */.){.  Op *aOp 
4650: 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20  = p->aOp;       
4660: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
4670: 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  >aOp */.  Op *pO
4680: 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20  p = aOp;        
4690: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
46a0: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  operation */.#if
46b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
46c0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
46d0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
46e0: 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20    Op *pOrigOp;  
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4700: 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20  Value of pOp at 
4710: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c  the top of the l
4720: 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  oop */.#endif.#i
4730: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4740: 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65  G.  int nExtraDe
4750: 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f  lete = 0;      /
4760: 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45  * Verifies FORDE
4770: 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45  LETE and AUXDELE
4780: 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64  TE flags */.#end
4790: 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  if.  int rc = SQ
47a0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
47b0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
47c0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
47d0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
47e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
47f0: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
4800: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
4810: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
4820: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
4830: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
4840: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4850: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4860: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
4870: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
4880: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
4890: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
48a0: 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69   of last compari
48b0: 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  son */.  unsigne
48c0: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
48d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
48e0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
48f0: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
4900: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4910: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4920: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
4930: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
4940: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
4950: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
4960: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
4970: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
4980: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
4990: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
49a0: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
49b0: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
49c0: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
49d0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
49e0: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4a00: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
4a10: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
4a20: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4a30: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
4a40: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4a50: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
4a60: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
4a70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64   operand */.#ifd
4a80: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4a90: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4ab0: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
4ac0: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
4ad0: 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f  de */.#endif.  /
4ae0: 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b  *** INSERT STACK
4af0: 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f   UNION HERE ***/
4b00: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d  ..  assert( p->m
4b10: 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
4b20: 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69  _RUN );  /* sqli
4b30: 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66  te3_step() verif
4b40: 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71  ies this */.  sq
4b50: 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70  lite3VdbeEnter(p
4b60: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  );.  if( p->rc==
4b70: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
4b80: 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
4b90: 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ens if a malloc(
4ba0: 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20  ) inside a call 
4bb0: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  to sqlite3_colum
4bc0: 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20  n_text() or.    
4bd0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ** sqlite3_colum
4be0: 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65  n_text16() faile
4bf0: 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  d.  */.    goto 
4c00: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73  no_mem;.  }.  as
4c10: 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c  sert( p->rc==SQL
4c20: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
4c30: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42  &0xff)==SQLITE_B
4c40: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4c50: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4c60: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4c70: 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74  );.  p->iCurrent
4c80: 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  Time = 0;.  asse
4c90: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4ca0: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4cb0: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4cc0: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4cd0: 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d  y = 0;.  if( db-
4ce0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
4cf0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
4d00: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
4d10: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  .  sqlite3VdbeIO
4d20: 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66  TraceSql(p);.#if
4d30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4d40: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4d50: 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  CK.  if( db->xPr
4d60: 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33  ogress ){.    u3
4d70: 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43  2 iPrior = p->aC
4d80: 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
4d90: 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
4da0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30  ];.    assert( 0
4db0: 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   < db->nProgress
4dc0: 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  Ops );.    nProg
4dd0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e  ressLimit = db->
4de0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28  nProgressOps - (
4df0: 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72  iPrior % db->nPr
4e00: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a  ogressOps);.  }.
4e10: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4e20: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4e30: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4e40: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4e50: 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70  ->pc==0.   && (p
4e60: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53  ->db->flags & (S
4e70: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4e80: 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  g|SQLITE_VdbeEQP
4e90: 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  |SQLITE_VdbeTrac
4ea0: 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  e))!=0.  ){.    
4eb0: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f  int i;.    int o
4ec0: 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  nce = 1;.    sql
4ed0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4ee0: 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  (p);.    if( p->
4ef0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4f00: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29  TE_VdbeListing )
4f10: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
4f20: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4f30: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  ting:\n");.     
4f40: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4f50: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4f60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4f70: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20  ntOp(stdout, i, 
4f80: 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20  &aOp[i]);.      
4f90: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4fa0: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4fb0: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b  QLITE_VdbeEQP ){
4fc0: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
4fd0: 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a  i<p->nOp; i++){.
4fe0: 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b          if( aOp[
4ff0: 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  i].opcode==OP_Ex
5000: 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
5010: 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72     if( once ) pr
5020: 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72 79  intf("VDBE Query
5030: 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20   Plan:\n");.    
5040: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
5050: 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a  \n", aOp[i].p4.z
5060: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63  );.          onc
5070: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
5080: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
5090: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
50a0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
50b0: 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74 66  eTrace )  printf
50c0: 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22  ("VDBE Trace:\n"
50d0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
50e0: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
50f0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
5100: 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b  pOp=&aOp[p->pc];
5110: 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20   1; pOp++){.    
5120: 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64 65  /* Errors are de
5130: 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76 69  tected by indivi
5140: 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69  dual opcodes, wi
5150: 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a  th an immediate.
5160: 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20      ** jumps to 
5170: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
5180: 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  or. */.    asser
5190: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
51a0: 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28   );..    assert(
51b0: 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70   pOp>=aOp && pOp
51c0: 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a  <&aOp[p->nOp]);.
51d0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
51e0: 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20  ILE.    start = 
51f0: 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
5200: 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53  .#endif.    nVmS
5210: 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  tep++;.#ifdef SQ
5220: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
5230: 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
5240: 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20  if( p->anExec ) 
5250: 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28  p->anExec[(int)(
5260: 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e  pOp-aOp)]++;.#en
5270: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79  dif..    /* Only
5280: 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69   allow tracing i
5290: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
52a0: 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
52b0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
52c0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62  DEBUG.    if( db
52d0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
52e0: 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20  _VdbeTrace ){.  
52f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5300: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28  rintOp(stdout, (
5310: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c  int)(pOp - aOp),
5320: 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e   pOp);.    }.#en
5330: 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20  dif.      ..    
5340: 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  /* Check to see 
5350: 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69  if we need to si
5360: 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72  mulate an interr
5370: 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20  upt.  This only 
5380: 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69  happens.    ** i
5390: 66 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63  f we have a spec
53a0: 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a  ial test build..
53b0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
53c0: 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66  LITE_TEST.    if
53d0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
53e0: 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20  upt_count>0 ){. 
53f0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5400: 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a  errupt_count--;.
5410: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
5420: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5430: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
5440: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5450: 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t(db);.      }. 
5460: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
5470: 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
5480: 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65  ing on other ope
5490: 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20  rands */.#ifdef 
54a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
54b0: 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70 50 72   {.      u8 opPr
54c0: 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74 65 33  operty = sqlite3
54d0: 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70  OpcodeProperty[p
54e0: 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20  Op->opcode];.   
54f0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5500: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
5510: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
5520: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
5530: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5540: 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  t( pOp->p1<=(p->
5550: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
5560: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
5570: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
5580: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
5590: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ]) );.        as
55a0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
55b0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
55c0: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
55d0: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52  1]) );.        R
55e0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
55f0: 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p1, &aMem[pOp
5600: 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p1]);.      }.
5610: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5620: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5630: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
5640: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5650: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5660: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5670: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5680: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5690: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
56a0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
56b0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p2]) );.       
56c0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
56d0: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
56e0: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
56f0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
5700: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5710: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
5720: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
5730: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
5740: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5750: 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN3)!=0 ){.    
5760: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5770: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
5780: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5790: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
57a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
57b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
57c0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
57d0: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
57e0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
57f0: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5800: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5810: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
5820: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
5830: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
5840: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
5850: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
5860: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5870: 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a  FLG_OUT2)!=0 ){.
5880: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5890: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
58a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
58b0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p2<=(p->nMem+1
58c0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
58d0: 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
58e0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
58f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5900: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5910: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5920: 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b  PFLG_OUT3)!=0 ){
5930: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5940: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5950: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5960: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
5970: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5980: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  );.        memAb
5990: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
59a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
59b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
59c0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
59d0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
59e0: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
59f0: 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69  ROFILE).    pOri
5a00: 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69  gOp = pOp;.#endi
5a10: 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28  f.  .    switch(
5a20: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
5a30: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
5a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
5a80: 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20  ** What follows 
5a90: 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69  is a massive swi
5aa0: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68  tch statement wh
5ab0: 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d  ere each case im
5ac0: 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65  plements a.** se
5ad0: 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69  parate instructi
5ae0: 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  on in the virtua
5af0: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77  l machine.  If w
5b00: 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75  e follow the usu
5b10: 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f  al.** indentatio
5b20: 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65  n conventions, e
5b30: 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20  ach case should 
5b40: 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36  be indented by 6
5b50: 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a   spaces.  But.**
5b60: 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f   that is a lot o
5b70: 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f  f wasted space o
5b80: 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69  n the left margi
5b90: 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20  n.  So the code 
5ba0: 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77  within.** the sw
5bb0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5bc0: 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63  ill break with c
5bd0: 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65  onvention and be
5be0: 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f   flush-left. Ano
5bf0: 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d  ther.** big comm
5c00: 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20  ent (similar to 
5c10: 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d  this one) will m
5c20: 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e  ark the point in
5c30: 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a   the code where.
5c40: 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e  ** we transition
5c50: 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20   back to normal 
5c60: 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  indentation..**.
5c70: 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e  ** The formattin
5c80: 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69  g of each case i
5c90: 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68  s important.  Th
5ca0: 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53  e makefile for S
5cb0: 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74  QLite.** generat
5cc0: 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22  es two C files "
5cd0: 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22  opcodes.h" and "
5ce0: 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63  opcodes.c" by sc
5cf0: 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66  anning this.** f
5d00: 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ile looking for 
5d10: 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e  lines that begin
5d20: 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22   with "case OP_"
5d30: 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68  .  The opcodes.h
5d40: 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62   files.** will b
5d50: 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64  e filled with #d
5d60: 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65  efines that give
5d70: 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20   unique integer 
5d80: 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a  values to each.*
5d90: 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65  * opcode and the
5da0: 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20   opcodes.c file 
5db0: 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61  is filled with a
5dc0: 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  n array of strin
5dd0: 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68  gs where.** each
5de0: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73   string is the s
5df0: 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72  ymbolic name for
5e00: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
5e10: 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74  ng opcode.  If t
5e20: 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65  he.** case state
5e30: 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  ment is followed
5e40: 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66   by a comment of
5e50: 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61   the form "/# sa
5e60: 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a  me as ... #/".**
5e70: 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73   that comment is
5e80: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
5e90: 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  ne the particula
5ea0: 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  r value of the o
5eb0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68  pcode..**.** Oth
5ec0: 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74  er keywords in t
5ed0: 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20  he comment that 
5ee0: 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73  follows each cas
5ef0: 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  e are used to.**
5f00: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f   construct the O
5f10: 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52  PFLG_INITIALIZER
5f20: 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74   value that init
5f30: 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72  ializes opcodePr
5f40: 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79  operty[]..** Key
5f50: 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69  words include: i
5f60: 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75  n1, in2, in3, ou
5f70: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
5f80: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
5f90: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
5fa0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
5fb0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
5fc0: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
5fd0: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
5fe0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
5ff0: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
6000: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
6010: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
6020: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
6030: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
6040: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
6050: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
6060: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
6070: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
6080: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
6090: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
60a0: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
60b0: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
60c0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
60d0: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
60e0: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
60f0: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
6100: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
6110: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
6120: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
6130: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
6190: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
61a0: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
61b0: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
61c0: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
61d0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
61e0: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
61f0: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
6200: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
6210: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
6220: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
6230: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61  .**.** The P1 pa
6240: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rameter is not a
6250: 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20  ctually used by 
6260: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f  this opcode.  Ho
6270: 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20  wever, it.** is 
6280: 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f  sometimes set to
6290: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20   1 instead of 0 
62a0: 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  as a hint to the
62b0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
62c0: 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  ell.** that this
62d0: 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74   Goto is the bot
62e0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e  tom of a loop an
62f0: 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73  d that the lines
6300: 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a   from P2 down.**
6310: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
6320: 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69  line should be i
6330: 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c  ndented for EXPL
6340: 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  AIN output..*/.c
6350: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6360: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6370: 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32  mp */.jump_to_p2
6380: 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
6390: 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20  nterrupt:.  pOp 
63a0: 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d  = &aOp[pOp->p2 -
63b0: 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64   1];..  /* Opcod
63c0: 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  es that are used
63d0: 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   as the bottom o
63e0: 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78  f a loop (OP_Nex
63f0: 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a  t, OP_Prev,.  **
6400: 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20 4f 50   OP_VNext, or OP
6410: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
6420: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
6430: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
6440: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
6450: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
6460: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
6470: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
6480: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6490: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
64a0: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
64b0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
64c0: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
64d0: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
64e0: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
64f0: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
6500: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
6510: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
6520: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
6530: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
6540: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
6550: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
6560: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
6570: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
6580: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
6590: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
65a0: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
65b0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
65c0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
65d0: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
65e0: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
65f0: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
6600: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
6610: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
6620: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
6630: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
6640: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
6650: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
6660: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
6670: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
6680: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
6690: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
66a0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
66b0: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
66c0: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
66d0: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
66e0: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
66f0: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
6700: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
6710: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
6720: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
6730: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
6740: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
6750: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
6760: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
6770: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
6780: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
6790: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
67a0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
67b0: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
67c0: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
67d0: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
67e0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
67f0: 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70  ss!=0 && nVmStep
6800: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
6810: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
6820: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
6830: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
6840: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
6850: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
6860: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
6870: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
6880: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
6890: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
68a0: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
68b0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
68c0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
68d0: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
68e0: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
68f0: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a  }.  }.#endif.  .
6900: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6910: 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31  pcode:  Gosub P1
6920: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6930: 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
6940: 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72  t address onto r
6950: 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e  egister P1.** an
6960: 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61  d then jump to a
6970: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61  ddress P2..*/.ca
6980: 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20  se OP_Gosub: {  
6990: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
69a0: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
69b0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
69c0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
69d0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
69e0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
69f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6a00: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
6a10: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
6a20: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6a30: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49  e(p, pIn1);.  pI
6a40: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6a50: 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  Int;.  pIn1->u.i
6a60: 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70   = (int)(pOp-aOp
6a70: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
6a80: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
6a90: 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a  1);..  /* Most j
6aa0: 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20 64  ump operations d
6ab0: 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69 73  o a goto to this
6ac0: 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20 74   spot in order t
6ad0: 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74 68  o update.  ** th
6ae0: 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a  e pOp pointer. *
6af0: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20  /.jump_to_p2:.  
6b00: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
6b10: 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b  p2 - 1];.  break
6b20: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6b30: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
6b40: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
6b50: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6b60: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
6b70: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
6b80: 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a  ter P1.  After.*
6b90: 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  * the jump, regi
6ba0: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6bb0: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
6bc0: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6bd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6be0: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6bf0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6c00: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
6c10: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
6c20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31   pOp = &aOp[pIn1
6c30: 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e  ->u.i];.  pIn1->
6c40: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
6c50: 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a  fined;.  break;.
6c60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6c70: 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50  itCoroutine P1 P
6c80: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
6c90: 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20 50  et up register P
6ca0: 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  1 so that it wil
6cb0: 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63  l Yield to the c
6cc0: 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61  oroutine.** loca
6cd0: 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20 50  ted at address P
6ce0: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d  3..**.** If P2!=
6cf0: 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75  0 then the corou
6d00: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6d10: 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ion immediately 
6d20: 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20  follows.** this 
6d30: 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70  opcode.  So jump
6d40: 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74   over the corout
6d50: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
6d60: 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73  on to.** address
6d70: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
6d80: 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  lso: EndCoroutin
6d90: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  e.*/.case OP_Ini
6da0: 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  tCoroutine: {   
6db0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
6dc0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6dd0: 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70   &&  pOp->p1<=(p
6de0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
6df0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
6e00: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26  rt( pOp->p2>=0 &
6e10: 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
6e20: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6e30: 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p3>=0 && pOp-
6e40: 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p3<p->nOp );.  
6e50: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
6e60: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6e70: 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63   !VdbeMemDynamic
6e80: 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74  (pOut) );.  pOut
6e90: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20  ->u.i = pOp->p3 
6ea0: 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  - 1;.  pOut->fla
6eb0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6ec0: 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f  if( pOp->p2 ) go
6ed0: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
6ee0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6ef0: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6f00: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
6f10: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
6f20: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
6f30: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6f40: 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a  P1 is a Yield..*
6f50: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32  * Jump to the P2
6f60: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68   parameter of th
6f70: 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74  at Yield..** Aft
6f80: 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  er the jump, reg
6f90: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6fa0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
6fb0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6fc0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6fd0: 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e  e OP_EndCoroutin
6fe0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
6ff0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f  * in1 */.  VdbeO
7000: 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49  p *pCaller;.  pI
7010: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
7020: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
7030: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
7040: 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
7050: 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26   pIn1->u.i>=0 &&
7060: 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f   pIn1->u.i<p->nO
7070: 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d  p );.  pCaller =
7080: 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d   &aOp[pIn1->u.i]
7090: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
70a0: 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  ler->opcode==OP_
70b0: 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72  Yield );.  asser
70c0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d  t( pCaller->p2>=
70d0: 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32  0 && pCaller->p2
70e0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70  <p->nOp );.  pOp
70f0: 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d   = &aOp[pCaller-
7100: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31  >p2 - 1];.  pIn1
7110: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
7120: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
7130: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7140: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
7150: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
7160: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
7170: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
7180: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
7190: 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68    This.** has th
71a0: 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c  e effect of yiel
71b0: 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74  ding to a corout
71c0: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ine..**.** If th
71d0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74  e coroutine that
71e0: 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20   is launched by 
71f0: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7200: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69   ends with.** Yi
7210: 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68  eld or Return th
7220: 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74  en continue to t
7230: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
7240: 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20  ion.  But if.** 
7250: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61  the coroutine la
7260: 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69  unched by this i
7270: 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20  nstruction ends 
7280: 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75  with.** EndCorou
7290: 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20  tine, then jump 
72a0: 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61  to P2 rather tha
72b0: 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74  n continuing wit
72c0: 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e  h the.** next in
72d0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
72e0: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
72f0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7300: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
7310: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
7320: 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63  jump */.  int pc
7330: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
7340: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7350: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7360: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
7370: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
7380: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
7390: 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e  cDest = (int)pIn
73a0: 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e  1->u.i;.  pIn1->
73b0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  u.i = (int)(pOp 
73c0: 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  - aOp);.  REGIST
73d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
73e0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d  , pIn1);.  pOp =
73f0: 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20   &aOp[pcDest];. 
7400: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7410: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
7420: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50  l  P1 P2 P3 P4 P
7430: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
7440: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
7450: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
7460: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7470: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
7480: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
7490: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
74a0: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
74b0: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
74c0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
74d0: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
74e0: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
74f0: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7500: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7510: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7520: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
7530: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
7540: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
7550: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
7560: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
7570: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
7580: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
7590: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
75a0: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
75b0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
75c0: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
75d0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
75e0: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
75f0: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7600: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7610: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7620: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
7630: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
7640: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
7650: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
7660: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
7670: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
7680: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
7690: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
76a0: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
76b0: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
76c0: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
76d0: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
76e0: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
76f0: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7700: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7710: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7720: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
7730: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
7740: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
7750: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
7760: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
7770: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
7780: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
7790: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
77a0: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
77b0: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
77c0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
77d0: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
77e0: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
77f0: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7800: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7810: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7820: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
7830: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
7840: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
7850: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
7860: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
7870: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
7880: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
7890: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
78a0: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
78b0: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
78c0: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
78d0: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
78e0: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
78f0: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7900: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7910: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7920: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
7930: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7940: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
7950: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
7960: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7970: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
7980: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
7990: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
79a0: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
79b0: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
79c0: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
79d0: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
79e0: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
79f0: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7a00: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7a10: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7a20: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
7a30: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
7a40: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7a50: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
7a60: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
7a70: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
7a80: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
7a90: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
7aa0: 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a  me;.  int pcx;..
7ab0: 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f    pcx = (int)(pO
7ac0: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20  p - aOp);.  if( 
7ad0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
7ae0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
7af0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
7b00: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
7b10: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7b20: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7b30: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
7b40: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
7b50: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
7b60: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
7b70: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
7b80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7b90: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
7ba0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
7bb0: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
7bc0: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
7bd0: 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70  rame);.    if( p
7be0: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
7bf0: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
7c00: 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73  struction pcx is
7c10: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
7c20: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
7c30: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
7c40: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
7c50: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
7c60: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
7c70: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
7c80: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
7c90: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
7ca0: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
7cb0: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
7cc0: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
7cd0: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
7ce0: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
7cf0: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
7d00: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
7d10: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
7d20: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
7d30: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
7d40: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
7d50: 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63   pcx = p->aOp[pc
7d60: 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  x].p2-1;.    }. 
7d70: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
7d80: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
7d90: 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26  Mem;.    pOp = &
7da0: 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72  aOp[pcx];.    br
7db0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
7dc0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
7dd0: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
7de0: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
7df0: 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73  >pc = pcx;.  ass
7e00: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  ert( pOp->p5<=4 
7e10: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  );.  if( p->rc )
7e20: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
7e30: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
7e40: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
7e50: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
7e60: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
7e70: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
7e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
7eb0: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
7ec0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7ed0: 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
7ee0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7ef0: 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20  ->p5==2 );.     
7f00: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7f10: 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74  p5==3 );.      t
7f20: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7f30: 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==4 );.      sql
7f40: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
7f50: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7f60: 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b  failed", azType[
7f70: 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20  pOp->p5-1]);.   
7f80: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a     if( pOp->p4.z
7f90: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a   ){.        p->z
7fa0: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
7fb0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a  MPrintf(db, "%z:
7fc0: 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67   %s", p->zErrMsg
7fd0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
7fe0: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
7ff0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8000: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
8010: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8020: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   }.    sqlite3_l
8030: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f  og(pOp->p1, "abo
8040: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
8050: 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a  : %s", pcx, p->z
8060: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
8070: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
8080: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
8090: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
80a0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
80b0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
80c0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
80d0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
80e0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
80f0: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42  p->rc = SQLITE_B
8100: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
8110: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8120: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
8130: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
8140: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
8150: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8160: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
8170: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c  DeferredCons>0 |
8180: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  | db->nDeferredI
8190: 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  mmCons>0 );.    
81a0: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
81b0: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
81c0: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
81d0: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
81e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
81f0: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
8200: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8210: 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54  r[P2]=P1.**.** T
8220: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
8230: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
8240: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
8250: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8260: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
8270: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8280: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8290: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
82a0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
82b0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
82c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
82d0: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
82e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
82f0: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
8300: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
8310: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
8320: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
8330: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
8340: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8350: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
8360: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
8370: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
8380: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8390: 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
83a0: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
83b0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
83c0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
83d0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
83e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
83f0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
8400: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
8410: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
8420: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8430: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
8440: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
8450: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
8460: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
8470: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8480: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8490: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
84a0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
84b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
84c0: 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  OAT, out2 */.  p
84d0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
84e0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
84f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8500: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
8510: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
8520: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
8530: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  );.  pOut->u.r =
8540: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
8550: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
8560: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
8570: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
8580: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8590: 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  r[P2]='P4'.**.**
85a0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
85b0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
85c0: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
85d0: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
85e0: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
85f0: 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65   a String opcode
8600: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
8610: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
8620: 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69  irst time.  Duri
8630: 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73  ng.** this trans
8640: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c  formation, the l
8650: 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20  ength of string 
8660: 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  P4 is computed a
8670: 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20  nd stored.** as 
8680: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
8690: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
86a0: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
86b0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
86c0: 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  RING, out2 */.  
86d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
86e0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
86f0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8700: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e  p, pOp);.  pOp->
8710: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
8720: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
8730: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
8740: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
8750: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8760: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
8770: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
8780: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
8790: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
87a0: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
87b0: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
87c0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
87d0: 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74  TIC);.    assert
87e0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
87f0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  || rc==SQLITE_TO
8800: 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20  OBIG );.    if( 
8810: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
8820: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
8830: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
8840: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
8850: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
8860: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
8870: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
8880: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
8890: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
88a0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
88b0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
88c0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
88d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
88e0: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
88f0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
8900: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
8910: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
8920: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
8930: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
8940: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
8950: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
8960: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
8970: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
8980: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73  ut->n;.  }.  tes
8990: 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
89a0: 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64  E_TOOBIG );.#end
89b0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
89c0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
89d0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
89e0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
89f0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _big;.  }.  asse
8a00: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
8a10: 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  K );.  /* Fall t
8a20: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
8a30: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
8a40: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
8a50: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
8a60: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
8a70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
8a80: 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  P4' (len=P1).**.
8a90: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
8aa0: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
8ab0: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
8ac0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
8ad0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
8ae0: 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  3 is not zero an
8af0: 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
8b00: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
8b10: 65 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65  equal to P5, the
8b20: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70  n.** the datatyp
8b30: 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65  e of the registe
8b40: 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65  r P2 is converte
8b50: 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20  d to BLOB.  The 
8b60: 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68  content is.** th
8b70: 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20  e same sequence 
8b80: 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20  of bytes, it is 
8b90: 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74  merely interpret
8ba0: 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73  ed as a BLOB ins
8bb0: 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72  tead.** of a str
8bc0: 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61  ing, as if it ha
8bd0: 64 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e  d been CAST.  In
8be0: 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a   other words:.**
8bf0: 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e  .** if( P3!=0 an
8c00: 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20  d reg[P3]==P5 ) 
8c10: 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28  reg[P2] := CAST(
8c20: 72 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29  reg[P2] as BLOB)
8c30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
8c40: 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  ng: {          /
8c50: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
8c60: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
8c70: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
8c80: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8c90: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
8ca0: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
8cb0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
8cc0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
8cd0: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
8ce0: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
8cf0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
8d00: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
8d10: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
8d20: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
8d30: 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41  E_LIKE_DOESNT_MA
8d40: 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20  TCH_BLOBS.  if( 
8d50: 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
8d60: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
8d70: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
8d80: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8d90: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
8da0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
8db0: 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
8dc0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
8dd0: 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d    if( pIn3->u.i=
8de0: 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d  =pOp->p5 ) pOut-
8df0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
8e00: 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  b|MEM_Static|MEM
8e10: 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69  _Term;.  }.#endi
8e20: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
8e30: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
8e40: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
8e50: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33  nopsis: r[P2..P3
8e60: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=NULL.**.** Wri
8e70: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
8e80: 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66  egisters P2.  If
8e90: 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e   P3 greater than
8ea0: 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77   P2, then also w
8eb0: 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74  rite.** NULL int
8ec0: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
8ed0: 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72  d every register
8ee0: 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61   in between P2 a
8ef0: 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a  nd P3.  If P3.**
8f00: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32   is less than P2
8f10: 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69   (typically P3 i
8f20: 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c  s zero) then onl
8f30: 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  y register P2 is
8f40: 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e  .** set to NULL.
8f50: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
8f60: 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
8f70: 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65  ro, then also se
8f80: 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65  t the MEM_Cleare
8f90: 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a  d flag so that.*
8fa0: 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69  * NULL values wi
8fb0: 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65  ll not compare e
8fc0: 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c  qual even if SQL
8fd0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
8fe0: 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72  t on.** OP_Ne or
8ff0: 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20   OP_Eq..*/.case 
9000: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
9010: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9020: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
9030: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75   nullFlag;.  pOu
9040: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
9050: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e  se(p, pOp);.  cn
9060: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
9070: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
9080: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
9090: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
90a0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
90b0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
90c0: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
90d0: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
90e0: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f  : MEM_Null;.  pO
90f0: 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77 68 69  ut->n = 0;.  whi
9100: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
9110: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
9120: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9130: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9140: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
9150: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75  l(pOut);.    pOu
9160: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
9170: 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 6e  lag;.    pOut->n
9180: 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b   = 0;.    cnt--;
9190: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
91a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
91b0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
91c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
91d0: 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65  1]=NULL.**.** Se
91e0: 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  t register P1 to
91f0: 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65 20   have the value 
9200: 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20  NULL as seen by 
9210: 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
9220: 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  d.** instruction
9230: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65  , but do not fre
9240: 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  e any string or 
9250: 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f  blob memory asso
9260: 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74  ciated with.** t
9270: 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20  he register, so 
9280: 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c 75  that if the valu
9290: 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f  e was a string o
92a0: 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a  r blob that was.
92b0: 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f  ** previously co
92c0: 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43  pied using OP_SC
92d0: 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20  opy, the copies 
92e0: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f  will continue to
92f0: 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61   be valid..*/.ca
9300: 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20  se OP_SoftNull: 
9310: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
9320: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
9330: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
9340: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
9350: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9360: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
9370: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
9380: 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66 69  ags&~(MEM_Undefi
9390: 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b 29  ned|MEM_AffMask)
93a0: 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72  )|MEM_Null;.  br
93b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
93c0: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
93d0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
93e0: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
93f0: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
9400: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
9410: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
9420: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
9430: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
9440: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
9450: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
9460: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
9470: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
9480: 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54  pOp->p1 <= SQLIT
9490: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a  E_MAX_LENGTH );.
94a0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
94b0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
94c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
94d0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
94e0: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
94f0: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
9500: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
9510: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9520: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
9530: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9540: 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31  ode: Variable P1
9550: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9560: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61  nopsis: r[P2]=pa
9570: 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a  rameter(P1,P4).*
9580: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
9590: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
95a0: 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20 69  d parameter P1 i
95b0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a  nto register P2.
95c0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72  **.** If the par
95d0: 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c  ameter is named,
95e0: 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61   then its name a
95f0: 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  ppears in P4..**
9600: 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69 73   The P4 value is
9610: 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
9620: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
9630: 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  name()..*/.case 
9640: 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20  OP_Variable: {  
9650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9660: 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72  2 */.  Mem *pVar
9670: 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65  ;       /* Value
9680: 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72   being transferr
9690: 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ed */..  assert(
96a0: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
96b0: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29  p->p1<=p->nVar )
96c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
96d0: 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d  >p4.z==0 || pOp-
96e0: 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c  >p4.z==sqlite3VL
96f0: 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e  istNumToName(p->
9700: 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20  pVList,pOp->p1) 
9710: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9720: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9730: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9740: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9750: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
9760: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70  too_big;.  }.  p
9770: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9780: 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
9790: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
97a0: 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45  y(pOut, pVar, ME
97b0: 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44  M_Static);.  UPD
97c0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
97d0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
97e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
97f0: 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ove P1 P2 P3 * *
9800: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9810: 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a  P2@P3]=r[P1@P3].
9820: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50  **.** Move the P
9830: 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  3 values in regi
9840: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
9850: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
9860: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
9870: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
9880: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a  P1..P1+P3-1 are.
9890: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
98a0: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
98b0: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
98c0: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
98d0: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
98e0: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
98f0: 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e  erlap.  It is an
9900: 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33   error.** for P3
9910: 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
9920: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d   1..*/.case OP_M
9930: 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20  ove: {.  int n; 
9940: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9950: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
9960: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
9970: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
9980: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
9990: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
99a0: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
99b0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
99c0: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
99d0: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
99e0: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
99f0: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
9a00: 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31  ssert( n>0 && p1
9a10: 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20  >0 && p2>0 );.  
9a20: 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32  assert( p1+n<=p2
9a30: 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a   || p2+n<=p1 );.
9a40: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
9a50: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9a60: 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20  Mem[p2];.  do{. 
9a70: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
9a80: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b  =&aMem[(p->nMem+
9a90: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  1 - p->nCursor)]
9aa0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
9ab0: 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pIn1<=&aMem[(p->
9ac0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
9ad0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9ae0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9af0: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9b00: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9b10: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9b20: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
9b30: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
9b40: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9b50: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
9b60: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
9b70: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
9b80: 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a  opyFrom<pOut ){.
9b90: 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f        pOut->pSco
9ba0: 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70  pyFrom += pOp->p
9bb0: 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65  2 - p1;.    }.#e
9bc0: 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d  ndif.    Deephem
9bd0: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
9be0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
9bf0: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
9c00: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
9c10: 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28  Out++;.  }while(
9c20: 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b   --n );.  break;
9c30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
9c40: 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  opy P1 P2 P3 * *
9c50: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9c60: 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33  P2@P3+1]=r[P1@P3
9c70: 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  +1].**.** Make a
9c80: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9c90: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
9ca0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
9cb0: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
9cc0: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9cd0: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
9ce0: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
9cf0: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
9d00: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
9d10: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
9d20: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
9d30: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
9d40: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
9d50: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
9d60: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
9d70: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9d80: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9d90: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
9da0: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
9db0: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
9dc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9dd0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
9de0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
9df0: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
9e00: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
9e10: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
9e20: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
9e30: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
9e40: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
9e50: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
9e60: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
9e70: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
9e80: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
9e90: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
9ea0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
9eb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
9ec0: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
9ed0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9ee0: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
9ef0: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
9f00: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
9f10: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9f20: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
9f30: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
9f40: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9f50: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
9f60: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
9f70: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
9f80: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
9f90: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
9fa0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
9fb0: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
9fc0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
9fd0: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
9fe0: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
9ff0: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
a000: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
a010: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
a020: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
a030: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
a040: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
a050: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
a060: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
a070: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
a080: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
a090: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
a0a0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
a0b0: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
a0c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
a0d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a0e0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
a0f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a100: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
a110: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
a120: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
a130: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
a140: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
a150: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
a160: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
a170: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
a180: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
a190: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
a1a0: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
a1b0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
a1c0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
a1d0: 6e 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a  ntCopy P1 P2 * *
a1e0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a1f0: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
a200: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69  * Transfer the i
a210: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
a220: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  d in register P1
a230: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
a240: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  2..**.** This is
a250: 20 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65   an optimized ve
a260: 72 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74  rsion of SCopy t
a270: 68 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66  hat works only f
a280: 6f 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  or integer.** va
a290: 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lues..*/.case OP
a2a0: 5f 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20  _IntCopy: {     
a2b0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
a2c0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
a2d0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
a2e0: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
a2f0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
a300: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
a310: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
a320: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
a330: 6e 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d  nt64(pOut, pIn1-
a340: 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
a350: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
a360: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
a370: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a380: 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d   output=r[P1@P2]
a390: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
a3a0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
a3b0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
a3c0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
a3d0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
a3e0: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
a3f0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
a400: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
a410: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
a420: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
a430: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
a440: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
a450: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
a460: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
a470: 63 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31  cess to the r(P1
a480: 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61  )..r(P1+P2-1) va
a490: 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72  lues as.** the r
a4a0: 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61  esult row..*/.ca
a4b0: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
a4c0: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
a4d0: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
a4e0: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
a4f0: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
a500: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
a510: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
a520: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28  p->p1+pOp->p2<=(
a530: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
a540: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69  Cursor)+1 );..#i
a550: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a560: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
a570: 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65  ACK.  /* Run the
a580: 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65   progress counte
a590: 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65  r just before re
a5a0: 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20  turning..  */.  
a5b0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
a5c0: 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74  s!=0.   && nVmSt
a5d0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
a5e0: 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  it.   && db->xPr
a5f0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
a600: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
a610: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
a620: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
a630: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a640: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e  o_error;.  }.#en
a650: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
a660: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
a670: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
a680: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
a690: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
a6a0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
a6b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
a6c0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
a6d0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
a6e0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
a6f0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
a700: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
a710: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
a720: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
a730: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
a740: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
a750: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
a760: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
a770: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
a780: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
a790: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
a7a0: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
a7b0: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
a7c0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
a7d0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
a7e0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
a7f0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
a800: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
a810: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
a820: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
a830: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a840: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
a850: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
a860: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
a870: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
a880: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
a890: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
a8a0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
a8b0: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
a8c0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
a8d0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
a8e0: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
a8f0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
a900: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a910: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
a920: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
a930: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
a940: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
a950: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
a960: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
a970: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a980: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
a990: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
a9a0: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
a9b0: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
a9c0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
a9d0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
a9e0: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
a9f0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
aa00: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
aa10: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
aa20: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
aa30: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
aa40: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
aa50: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
aa60: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
aa70: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
aa80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
aa90: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
aaa0: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
aab0: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
aac0: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
aad0: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
aae0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
aaf0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
ab00: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
ab10: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
ab20: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
ab30: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
ab40: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
ab50: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
ab60: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
ab70: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49  TE_OK );..  /* I
ab80: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
ab90: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
aba0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
abb0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
abc0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
abd0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
abe0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
abf0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
ac00: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
ac10: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
ac20: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
ac30: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
ac40: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
ac50: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
ac60: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
ac70: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
ac80: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
ac90: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
aca0: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
acb0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
acc0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
acd0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
ace0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
acf0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
ad00: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
ad10: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
ad20: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
ad30: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
ad40: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
ad50: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
ad60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ad70: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
ad80: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
ad90: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
ada0: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
adb0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
adc0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
add0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69  oto no_mem;..  i
ade0: 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20  f( db->mTrace & 
adf0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
ae00: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61   ){.    db->xTra
ae10: 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ce(SQLITE_TRACE_
ae20: 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41  ROW, db->pTraceA
ae30: 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a  rg, p, 0);.  }..
ae40: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
ae50: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
ae60: 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
ae70: 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63  - aOp) + 1;.  rc
ae80: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
ae90: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
aea0: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
aeb0: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
aec0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
aed0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
aee0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P1].**.** Add th
aef0: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
af00: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
af10: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
af20: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
af30: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
af40: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
af50: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
af60: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
af70: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
af80: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
af90: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
afa0: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
afb0: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
afc0: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
afd0: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
afe0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
aff0: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
b000: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
b010: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
b020: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
b030: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
b040: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
b050: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
b060: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b070: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
b080: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b090: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
b0a0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b0b0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b0c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b0d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b0e0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
b0f0: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
b100: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
b110: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b120: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
b130: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b140: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
b150: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
b160: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
b170: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
b180: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
b190: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
b1a0: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
b1b0: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
b1c0: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
b1d0: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
b1e0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
b1f0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
b200: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
b210: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
b220: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
b230: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
b240: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
b250: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
b260: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
b270: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
b280: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
b290: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
b2a0: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
b2b0: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
b2c0: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
b2d0: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
b2e0: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
b2f0: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
b300: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
b310: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
b320: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
b330: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
b340: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
b350: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
b360: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
b370: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
b380: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
b390: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
b3a0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
b3b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b3c0: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
b3d0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b3e0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
b3f0: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
b400: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b410: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
b420: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b430: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b440: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b450: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b460: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b470: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b480: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b490: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
b4a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b4b0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b4c0: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
b4d0: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
b4e0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b4f0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
b500: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b510: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b520: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b530: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b540: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b550: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b560: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b570: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
b580: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b590: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b5a0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
b5b0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
b5c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b5d0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
b5e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b5f0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b600: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b610: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b620: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b630: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b640: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b650: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
b660: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b670: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b680: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
b690: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
b6a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b6b0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
b6c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b6d0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b6e0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b6f0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
b700: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
b710: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
b720: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
b730: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b740: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
b750: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
b760: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b770: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b780: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
b790: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b7a0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b7b0: 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  2]%r[P1].**.** C
b7c0: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
b7d0: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
b7e0: 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69  er register P2 i
b7f0: 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a  s divided by .**
b800: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b810: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b820: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b830: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
b840: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b850: 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  1 is zero the re
b860: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
b870: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
b880: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
b890: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b8a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b8d0: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
b8e0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b8f0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
b900: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b910: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
b920: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b930: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b950: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
b960: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b970: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
b980: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
b990: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b9a0: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
b9b0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b9c0: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
b9d0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b9e0: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
b9f0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63  in2, out3 */.  c
ba00: 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f  har bIntint;   /
ba10: 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73  * Started out as
ba20: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65   two integer ope
ba30: 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66  rands */.  u16 f
ba40: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
ba50: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
ba60: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
ba70: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
ba80: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
ba90: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
baa0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
bab0: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
bac0: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
bad0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
bae0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
baf0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bb00: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
bb10: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
bb20: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
bb30: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
bb40: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bb50: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
bb60: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
bb70: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bb80: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
bb90: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
bba0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
bbb0: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
bbc0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
bbd0: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
bbe0: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
bbf0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
bc00: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
bc10: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
bc20: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
bc30: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
bc40: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
bc50: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
bc60: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
bc70: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
bc80: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
bc90: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
bca0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
bcb0: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
bcc0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
bcd0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
bce0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
bcf0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
bd00: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
bd10: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
bd20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bd30: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
bd40: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
bd50: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bd60: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
bd70: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bd80: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
bd90: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
bda0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bdb0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bdc0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bdd0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
bde0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
bdf0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
be00: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
be10: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
be20: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
be30: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
be40: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
be50: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
be60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
be70: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
be80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
be90: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bea0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
beb0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bec0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
bed0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
bee0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
bef0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bf00: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bf10: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
bf20: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bf30: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
bf40: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
bf50: 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
bf60: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
bf70: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
bf80: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49  .  }else{.    bI
bf90: 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61  ntint = 0;.fp_ma
bfa0: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
bfb0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
bfc0: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
bfd0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
bfe0: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
bff0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
c000: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
c010: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c020: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
c030: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c040: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
c050: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
c060: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c070: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
c080: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
c090: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c0a0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
c0b0: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
c0c0: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
c0d0: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
c0e0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
c0f0: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
c100: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
c110: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c120: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c130: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
c140: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
c150: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c160: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
c170: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
c180: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
c190: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
c1a0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c1b0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c1c0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c1d0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c1e0: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
c1f0: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
c200: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
c210: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c220: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
c230: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
c240: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
c250: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
c260: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c270: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
c280: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
c290: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
c2a0: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
c2b0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
c2c0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
c2d0: 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72     pOut->u.r = r
c2e0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
c2f0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
c300: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
c310: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
c320: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
c330: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
c340: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
c350: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
c360: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
c370: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
c380: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c390: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
c3a0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
c3b0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
c3c0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
c3d0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
c3e0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
c3f0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
c400: 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20 74 68  eq object. If th
c410: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
c420: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
c430: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
c440: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
c450: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
c460: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
c470: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
c480: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
c490: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
c4a0: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
c4b0: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
c4c0: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
c4d0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
c4e0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
c4f0: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
c500: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
c510: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
c520: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
c530: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
c540: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
c550: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
c560: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
c570: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
c580: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
c590: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
c5a0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
c5b0: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
c5c0: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
c5d0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
c5e0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
c5f0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
c600: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
c610: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
c620: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
c630: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
c640: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20  le.** publicly. 
c650: 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66   Only built-in f
c660: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63  unctions have ac
c670: 63 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61  cess to this fea
c680: 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
c690: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
c6a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
c6b0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
c6c0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
c6d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c6e0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
c6f0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
c700: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c710: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
c720: 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50  tion0 P1 P2 P3 P
c730: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
c740: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
c750: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
c760: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
c770: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
c780: 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65  nter to a FuncDe
c790: 66 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a  f object that.**
c7a0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e   defines the fun
c7b0: 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61  ction) with P5 a
c7c0: 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66  rguments taken f
c7d0: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
c7e0: 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  and.** successor
c7f0: 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  s.  The result o
c800: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
c810: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
c820: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69  ster P3..** Regi
c830: 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74  ster P3 must not
c840: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   be one of the f
c850: 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a  unction inputs..
c860: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32  **.** P1 is a 32
c870: 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64  -bit bitmask ind
c880: 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20  icating whether 
c890: 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75  or not each argu
c8a0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20  ment to the .** 
c8b0: 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74  function was det
c8c0: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f  ermined to be co
c8d0: 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c  nstant at compil
c8e0: 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66  e time. If the f
c8f0: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
c900: 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68   was constant th
c910: 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69  en bit 0 of P1 i
c920: 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  s set. This is u
c930: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
c940: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61  .** whether meta
c950: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
c960: 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e   with a user fun
c970: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75  ction argument u
c980: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
c990: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
c9a0: 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66  ) API may be saf
c9b0: 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74  ely retained unt
c9c0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  il the next.** i
c9d0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
c9e0: 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
c9f0: 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69  See also: Functi
ca00: 6f 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  on, AggStep, Agg
ca10: 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Final.*/./* Opco
ca20: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
ca30: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ca40: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66  ynopsis: r[P3]=f
ca50: 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  unc(r[P2@P5]).**
ca60: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65  .** Invoke a use
ca70: 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69  r function (P4 i
ca80: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
ca90: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
caa0: 74 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a  t object that.**
cab0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
cac0: 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74  ter to the funct
cad0: 69 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77  ion to be run) w
cae0: 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73  ith P5 arguments
caf0: 20 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72   taken.** from r
cb00: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
cb10: 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20  uccessors.  The 
cb20: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
cb30: 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  nction is stored
cb40: 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
cb50: 50 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  P3.  Register P3
cb60: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
cb70: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
cb80: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
cb90: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
cba0: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
cbb0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
cbc0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
cbd0: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
cbe0: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
cbf0: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
cc00: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
cc10: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
cc20: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
cc30: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
cc40: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
cc50: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
cc60: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
cc70: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
cc80: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
cc90: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
cca0: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
ccb0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
ccc0: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
ccd0: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
cce0: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
ccf0: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
cd00: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
cd10: 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e  e..**.** SQL fun
cd20: 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69  ctions are initi
cd30: 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50  ally coded as OP
cd40: 5f 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20  _Function0 with 
cd50: 50 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74  P4 pointing.** t
cd60: 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  o a FuncDef obje
cd70: 63 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73  ct.  But on firs
cd80: 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68  t evaluation, th
cd90: 65 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a  e P4 operand is.
cda0: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
cdb0: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
cdc0: 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
cdd0: 78 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  xt object and th
cde0: 65 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63  e operation.** c
cdf0: 68 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f  hanged to this O
ce00: 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64  P_Function opcod
ce10: 65 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  e.  In this way,
ce20: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
ce30: 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71  ion of.** the sq
ce40: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62  lite3_context ob
ce50: 6a 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79  ject occurs only
ce60: 20 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68   once, rather th
ce70: 61 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  an once for each
ce80: 0a 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f  .** evaluation o
ce90: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
cea0: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
ceb0: 46 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74  Function0, AggSt
cec0: 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  ep, AggFinal.*/.
ced0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
cee0: 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  0: {.  int n;.  
cef0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cf00: 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
cf10: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
cf20: 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e  4_FUNCDEF );.  n
cf30: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73   = pOp->p5;.  as
cf40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
cf50: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
cf60: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
cf70: 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
cf80: 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
cf90: 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
cfa0: 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
cfb0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
cfc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
cfd0: 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
cfe0: 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
cff0: 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71  n );.  pCtx = sq
d000: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
d010: 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70  NN(db, sizeof(*p
d020: 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a  Ctx) + (n-1)*siz
d030: 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  eof(sqlite3_valu
d040: 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78  e*));.  if( pCtx
d050: 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
d060: 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  m;.  pCtx->pOut 
d070: 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75  = 0;.  pCtx->pFu
d080: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
d090: 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20  nc;.  pCtx->iOp 
d0a0: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
d0b0: 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62  p);.  pCtx->pVdb
d0c0: 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61  e = p;.  pCtx->a
d0d0: 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e  rgc = n;.  pOp->
d0e0: 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43  p4type = P4_FUNC
d0f0: 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70  CTX;.  pOp->p4.p
d100: 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f  Ctx = pCtx;.  pO
d110: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46  p->opcode = OP_F
d120: 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61  unction;.  /* Fa
d130: 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
d140: 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  OP_Function */.}
d150: 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f  .case OP_Functio
d160: 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  n: {.  int i;.  
d170: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
d180: 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
d190: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
d1a0: 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70  4_FUNCCTX );.  p
d1b0: 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43  Ctx = pOp->p4.pC
d1c0: 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  tx;..  /* If thi
d1d0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
d1e0: 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
d1f0: 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
d200: 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
d210: 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
d220: 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
d230: 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
d240: 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
d250: 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
d260: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
d270: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
d280: 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
d290: 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
d2a0: 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
d2b0: 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
d2c0: 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
d2d0: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
d2e0: 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61  t */.  pOut = &a
d2f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
d300: 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21  if( pCtx->pOut !
d310: 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43  = pOut ){.    pC
d320: 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b  tx->pOut = pOut;
d330: 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
d340: 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
d350: 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
d360: 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
d370: 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d  2+i];.  }..  mem
d380: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d390: 20 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53   pOut);.#ifdef S
d3a0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
d3b0: 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
d3c0: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
d3d0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
d3e0: 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
d3f0: 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
d400: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
d410: 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
d420: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 4d  ;.  }.#endif.  M
d430: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d440: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d450: 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
d460: 75 78 20 3d 20 30 3b 0a 20 20 28 2a 70 43 74 78  ux = 0;.  (*pCtx
d470: 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29  ->pFunc->xSFunc)
d480: 28 70 43 74 78 2c 20 70 43 74 78 2d 3e 61 72 67  (pCtx, pCtx->arg
d490: 63 2c 20 70 43 74 78 2d 3e 61 72 67 76 29 3b 2f  c, pCtx->argv);/
d4a0: 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
d4b0: 33 32 33 30 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  3230 */..  /* If
d4c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
d4d0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
d4e0: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
d4f0: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ion */.  if( pCt
d500: 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29  x->fErrorOrAux )
d510: 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
d520: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20  isError ){.     
d530: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
d540: 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
d550: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4f  e3_value_text(pO
d560: 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
d570: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
d580: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
d590: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
d5a0: 74 61 28 64 62 2c 20 26 70 2d 3e 70 41 75 78 44  ta(db, &p->pAuxD
d5b0: 61 74 61 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20  ata, pCtx->iOp, 
d5c0: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 69 66  pOp->p1);.    if
d5d0: 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
d5e0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
d5f0: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
d600: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
d610: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
d620: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
d630: 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  if( pOut->flags 
d640: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
d650: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  lob) ){.    sqli
d660: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
d670: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
d680: 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73  ding);.    if( s
d690: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
d6a0: 42 69 67 28 70 4f 75 74 29 20 29 20 67 6f 74 6f  Big(pOut) ) goto
d6b0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
d6c0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d6d0: 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
d6e0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
d6f0: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
d700: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d710: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d720: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d730: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
d740: 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  &r[P2].**.** Tak
d750: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41  e the bit-wise A
d760: 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
d770: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d780: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
d790: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
d7a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
d7b0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
d7c0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
d7d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
d7e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  /./* Opcode: Bit
d7f0: 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
d800: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
d810: 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a  3]=r[P1]|r[P2].*
d820: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
d830: 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65  t-wise OR of the
d840: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
d850: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
d860: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
d870: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
d880: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
d890: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
d8a0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
d8b0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
d8c0: 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31  de: ShiftLeft P1
d8d0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d8e0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
d8f0: 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]<<r[P1].**.**
d900: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
d910: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
d920: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
d930: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
d940: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
d950: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
d960: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
d970: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
d980: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d990: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d9a0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d9b0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d9c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d9d0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67  Opcode: ShiftRig
d9e0: 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ht P1 P2 P3 * *.
d9f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
da00: 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a  3]=r[P2]>>r[P1].
da10: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
da20: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
da30: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
da40: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
da50: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
da60: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
da70: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
da80: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
da90: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
daa0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
dab0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
dac0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
dad0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
dae0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
daf0: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
db00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
db10: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
db20: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
db30: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
db40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
db50: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
db60: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
db70: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
db80: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
db90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dba0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
dbb0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
dbc0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
dbd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dbe0: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
dbf0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
dc00: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
dc10: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
dc20: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
dc30: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
dc40: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
dc50: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
dc60: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
dc70: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
dc80: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
dc90: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
dca0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
dcb0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
dcc0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
dcd0: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
dce0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
dcf0: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
dd00: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
dd10: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
dd20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
dd30: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
dd40: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
dd50: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
dd60: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
dd70: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
dd80: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
dd90: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
dda0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
ddb0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
ddc0: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
ddd0: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
dde0: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
ddf0: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
de00: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
de10: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
de20: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
de30: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
de40: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
de50: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
de60: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
de70: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
de80: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
de90: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
dea0: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
deb0: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
dec0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
ded0: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
dee0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
def0: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
df00: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
df10: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
df20: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
df30: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
df40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
df50: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
df60: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
df70: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
df80: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
df90: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
dfa0: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
dfb0: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
dfc0: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
dfd0: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
dfe0: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
dff0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
e000: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
e010: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
e020: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
e030: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e040: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
e050: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e060: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
e070: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
e080: 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b  nopsis: r[P1]=r[
e090: 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64  P1]+P2.** .** Ad
e0a0: 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50  d the constant P
e0b0: 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  2 to the value i
e0c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
e0d0: 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
e0e0: 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65  always an intege
e0f0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63  r..**.** To forc
e100: 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74  e any register t
e110: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c  o be an integer,
e120: 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a   just add 0..*/.
e130: 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20  case OP_AddImm: 
e140: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
e150: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e160: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e170: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
e180: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73  ge(p, pIn1);.  s
e190: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
e1a0: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
e1b0: 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
e1c0: 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p2;.  break;.
e1d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
e1e0: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
e1f0: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
e200: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e210: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
e220: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
e230: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
e240: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
e250: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
e260: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
e270: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
e280: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
e290: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
e2a0: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
e2b0: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
e2c0: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
e2d0: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
e2e0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
e2f0: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
e300: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
e310: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e320: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e330: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
e340: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
e350: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
e360: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
e370: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
e380: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64  ncoding);.    Vd
e390: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70  beBranchTaken((p
e3a0: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
e3b0: 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20  nt)==0, 2);.    
e3c0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e3d0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e3e0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
e3f0: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
e400: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
e410: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20  SMATCH;.        
e420: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
e430: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
e440: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f  else{.        go
e450: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
e460: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
e470: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
e480: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29  g(pIn1, MEM_Int)
e490: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
e4a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e4b0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
e4c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
e4d0: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
e4e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
e4f0: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
e500: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
e510: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
e520: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
e530: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
e540: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
e550: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
e560: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
e570: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
e580: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
e590: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
e5a0: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
e5b0: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
e5c0: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
e5d0: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
e5e0: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
e5f0: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
e600: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
e610: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
e620: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e640: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
e650: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e660: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
e670: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
e680: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e690: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
e6a0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e6b0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
e6c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
e6d0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73  T./* Opcode: Cas
e6e0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
e6f0: 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
e700: 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a  ity(r[P1]).**.**
e710: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
e720: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
e730: 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64  to be the type d
e740: 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a  efined by P2..**
e750: 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69   .** <ul>.** <li
e760: 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72 3b  > P2=='A' &rarr;
e770: 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50 32   BLOB.** <li> P2
e780: 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45 58  =='B' &rarr; TEX
e790: 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 43  T.** <li> P2=='C
e7a0: 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49 43  ' &rarr; NUMERIC
e7b0: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44 27  .** <li> P2=='D'
e7c0: 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52 0a   &rarr; INTEGER.
e7d0: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27 20  ** <li> P2=='E' 
e7e0: 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20 3c  &rarr; REAL.** <
e7f0: 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  /ul>.**.** A NUL
e800: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
e810: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
e820: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
e830: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
e840: 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20  e OP_Cast: {    
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e860: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
e870: 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54  ( pOp->p2>=SQLIT
e880: 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f  E_AFF_BLOB && pO
e890: 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46  p->p2<=SQLITE_AF
e8a0: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74  F_REAL );.  test
e8b0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e8c0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
e8d0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e8e0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e8f0: 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74  F_BLOB );.  test
e900: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e910: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e920: 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  C );.  testcase(
e930: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e940: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a  _AFF_INTEGER );.
e950: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e960: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e970: 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d  REAL );.  pIn1 =
e980: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e990: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
e9a0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
e9b0: 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
e9c0: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
e9d0: 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31  VdbeMemCast(pIn1
e9e0: 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64  , pOp->p2, encod
e9f0: 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
ea00: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
ea10: 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
ea20: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
ea30: 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
ea40: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
ea50: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
ea60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
ea70: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ea80: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
ea90: 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]==r[P1].**.**
eaa0: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
eab0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
eac0: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
ead0: 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20  eg(P3)==reg(P1) 
eae0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
eaf0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20  address P2.  Or 
eb00: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  if the SQLITE_ST
eb10: 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65  OREP2 flag is se
eb20: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a  t in P5, then.**
eb30: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
eb40: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
eb50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
eb60: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
eb70: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
eb80: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
eb90: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
eba0: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
ebb0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
ebc0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
ebd0: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
ebe0: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
ebf0: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
ec00: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
ec10: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
ec20: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
ec30: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
ec40: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
ec50: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
ec60: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
ec70: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
ec80: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
ec90: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
eca0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
ecb0: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
ecc0: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
ecd0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
ece0: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
ecf0: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
ed00: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
ed10: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
ed20: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
ed30: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
ed40: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
ed50: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
ed60: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
ed70: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
ed80: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
ed90: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
eda0: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
edb0: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
edc0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
edd0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
ede0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
edf0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
ee00: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
ee10: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
ee20: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
ee30: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
ee40: 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20 74  .** P4 is used t
ee50: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
ee60: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
ee70: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
ee80: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
ee90: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
eea0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
eeb0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
eec0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
eed0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
eee0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
eef0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
ef00: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
ef10: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
ef20: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
ef30: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ef40: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
ef50: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
ef60: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ef70: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
ef80: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
ef90: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
efa0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
efb0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
efc0: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
efd0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
efe0: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
eff0: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
f000: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
f010: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
f020: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
f030: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
f040: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f050: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f060: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
f070: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
f080: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
f090: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
f0a0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
f0b0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
f0c0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
f0d0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
f0e0: 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68  5..**.** If both
f0f0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f100: 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  and SQLITE_KEEPN
f110: 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65  ULL flags are se
f120: 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f  t then the.** co
f130: 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69  ntent of r[P2] i
f140: 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69  s only changed i
f150: 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  f the new value 
f160: 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61  is NULL or 0 (fa
f170: 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  lse)..** In othe
f180: 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72  r words, a prior
f190: 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c   r[P2] value wil
f1a0: 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69  l not be overwri
f1b0: 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65 29  tten by 1 (true)
f1c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f1d0: 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ne P1 P2 P3 P4 P
f1e0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f1f0: 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a  F r[P3]!=r[P1].*
f200: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f210: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71  just like the Eq
f220: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f230: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f240: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f250: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
f260: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
f270: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
f280: 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  See the Eq opcod
f290: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
f2a0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f2b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53  .**.** If both S
f2c0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e  QLITE_STOREP2 an
f2d0: 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  d SQLITE_KEEPNUL
f2e0: 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  L flags are set 
f2f0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74  then the.** cont
f300: 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20  ent of r[P2] is 
f310: 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20  only changed if 
f320: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73  the new value is
f330: 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65   NULL or 1 (true
f340: 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  )..** In other w
f350: 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b  ords, a prior r[
f360: 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e  P2] value will n
f370: 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ot be overwritte
f380: 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a  n by 0 (false)..
f390: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  */./* Opcode: Lt
f3a0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f3b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
f3c0: 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P3]<r[P1].**.*
f3d0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
f3e0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f3f0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
f400: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
f410: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
f420: 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20  address P2.  Or 
f430: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  if the SQLITE_ST
f440: 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65  OREP2 flag is se
f450: 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a  t in P5 store.**
f460: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f470: 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20  omparison (0 or 
f480: 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20  1 or NULL) into 
f490: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
f4a0: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
f4b0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
f4c0: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
f4d0: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
f4e0: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
f4f0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74   NULL then the t
f500: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
f510: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
f520: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
f530: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
f540: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
f550: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f560: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
f570: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
f580: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
f590: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
f5a0: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
f5b0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
f5c0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
f5d0: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
f5e0: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
f5f0: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
f600: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
f610: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
f620: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
f630: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
f640: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
f650: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
f660: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
f670: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
f680: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
f690: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
f6a0: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
f6b0: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
f6c0: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
f6d0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
f6e0: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
f6f0: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
f700: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
f710: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
f720: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f730: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
f740: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
f750: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
f760: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
f770: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
f780: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
f790: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
f7a0: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
f7b0: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
f7c0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
f7d0: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
f7e0: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
f7f0: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
f800: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
f810: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
f820: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
f830: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
f840: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
f850: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
f860: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
f870: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
f880: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
f890: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
f8a0: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
f8b0: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
f8c0: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
f8d0: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
f8e0: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
f8f0: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
f900: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
f910: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
f920: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
f930: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
f940: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
f950: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
f960: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
f970: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
f980: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f990: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f9a0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f9b0: 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a  F r[P3]<=r[P1].*
f9c0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f9d0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f9e0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f9f0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
fa00: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
fa10: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
fa20: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
fa30: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
fa40: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
fa50: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
fa60: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
fa70: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
fa80: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
fa90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
faa0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fab0: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
fac0: 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P3]>r[P1].**.** 
fad0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
fae0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
faf0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fb00: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fb10: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fb20: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
fb30: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
fb40: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
fb50: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
fb60: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
fb70: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
fb80: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
fb90: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
fba0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fbb0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
fbc0: 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]>=r[P1].**.
fbd0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
fbe0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
fbf0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
fc00: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
fc10: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
fc20: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
fc30: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
fc40: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
fc50: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
fc60: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
fc70: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
fc80: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
fc90: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
fca0: 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20  /.case OP_Eq:   
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fcc0: 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75  ame as TK_EQ, ju
fcd0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
fce0: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20  case OP_Ne:     
fcf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fd00: 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70  e as TK_NE, jump
fd10: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
fd20: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
fd30: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fd40: 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20  as TK_LT, jump, 
fd50: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
fd60: 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20   OP_Le:         
fd70: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fd80: 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LE, jump, in
fd90: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
fda0: 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Gt:           
fdb0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fdc0: 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GT, jump, in1,
fdd0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
fde0: 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Ge: {           
fdf0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fe00: 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GE, jump, in1, i
fe10: 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c  n3 */.  int res,
fe20: 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52   res2;      /* R
fe30: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d  esult of the com
fe40: 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20  parison of pIn1 
fe50: 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a  against pIn3 */.
fe60: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
fe70: 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
fe80: 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d  y to use for com
fe90: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36  parison */.  u16
fea0: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
feb0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
fec0: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
fed0: 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31  1->flags */.  u1
fee0: 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20  6 flags3;       
fef0: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
ff00: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
ff10: 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20  n3->flags */..  
ff20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ff30: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
ff40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
ff50: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
ff60: 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33  >flags;.  flags3
ff70: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
ff80: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
ff90: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c  flags3)&MEM_Null
ffa0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
ffb0: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
ffc0: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
ffd0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
ffe0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
fff0: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
10000 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
10010 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
10020 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
10030 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
10040 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
10050 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
10060 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
10070 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
10080 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
10090 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
100a0 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
100b0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
100c0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
100d0 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
100e0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
100f0 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61      assert( (fla
10100 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65  gs1 & MEM_Cleare
10110 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  d)==0 );.      a
10120 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
10130 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
10140 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)==0 );.     
10150 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61   if( (flags1&fla
10160 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
10170 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
10180 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
10190 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
101a0 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
101b0 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71   Operands are eq
101c0 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
101d0 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
101e0 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 1;  /* Operand
101f0 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
10200 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  */.      }.    }
10210 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53  else{.      /* S
10220 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
10230 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61  clear and at lea
10240 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69  st one operand i
10250 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a  s NULL,.      **
10260 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10270 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
10280 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  .      ** The ju
10290 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
102a0 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
102b0 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
102c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
102d0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
102e0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
102f0 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
10300 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10310 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20         iCompare 
10320 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61  = 1;    /* Opera
10330 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  nds are not equa
10340 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d  l */.        mem
10350 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10360 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   pOut);.        
10370 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10380 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
10390 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
103a0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
103b0 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
103c0 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
103d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
103e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
103f0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
10400 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
10410 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
10420 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
10430 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
10440 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
10450 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
10460 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
10470 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
10480 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
10490 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
104a0 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
104b0 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
104c0 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
104d0 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
104e0 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c     if( (flags1 |
104f0 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72   flags3)&MEM_Str
10500 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
10510 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
10520 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
10530 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
10540 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
10550 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
10560 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
10570 20 20 20 20 74 65 73 74 63 61 73 65 28 20 66 6c      testcase( fl
10580 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67  ags3!=pIn3->flag
10590 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65  s ); /* Possible
105a0 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a   if pIn1==pIn3 *
105b0 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  /.          flag
105c0 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
105d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
105e0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
105f0 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
10600 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
10610 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
10620 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
10630 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
10640 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10650 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e    }.      /* Han
10660 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
10670 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63  ase of integer c
10680 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20  omparison here, 
10690 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f  as an.      ** o
106a0 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20  ptimization, to 
106b0 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20  avoid a call to 
106c0 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
106d0 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  e() */.      if(
106e0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
106f0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10700 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
10710 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10720 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i > pIn1->u.i )
10730 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f  { res = +1; goto
10740 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10750 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
10760 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69  >u.i < pIn1->u.i
10770 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f   ){ res = -1; go
10780 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
10790 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
107a0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63  ;.        goto c
107b0 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20  ompare_op;.     
107c0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
107d0 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
107e0 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
107f0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10800 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
10810 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
10820 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
10830 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
10840 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10850 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
10860 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10870 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10880 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
10890 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
108a0 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31  emStringify(pIn1
108b0 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
108c0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
108d0 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79  ( (flags1&MEM_Dy
108e0 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  n) != (pIn1->fla
108f0 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
10900 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20         flags1 = 
10910 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn1->flags & ~
10920 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
10930 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79  (flags1 & MEM_Ty
10940 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20  peMask);.       
10950 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
10960 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  In3 );.      }. 
10970 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
10980 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
10990 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  & (flags3 & (MEM
109a0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
109b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
109c0 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
109d0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
109e0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
109f0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
10a00 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10a10 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10a20 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
10a30 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  3, encoding, 1);
10a40 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10a50 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44  e( (flags3&MEM_D
10a60 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c  yn) != (pIn3->fl
10a70 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
10a80 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
10a90 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10aa0 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
10ab0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54   (flags3 & MEM_T
10ac0 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
10ad0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
10ae0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
10af0 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
10b00 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
10b10 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
10b20 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
10b30 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
10b40 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63  p4.pColl);.  }.c
10b50 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 73 77 69  ompare_op:.  swi
10b60 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
10b70 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
10b80 45 71 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Eq:    res2 = re
10b90 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
10ba0 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
10bb0 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3b 20      res2 = res; 
10bc0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
10bd0 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
10be0 20 72 65 73 32 20 3d 20 72 65 73 3c 30 3b 20 20   res2 = res<0;  
10bf0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10c00 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65  ase OP_Le:    re
10c10 73 32 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  s2 = res<=0;    
10c20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10c30 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 32 20   OP_Gt:    res2 
10c40 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
10c50 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
10c60 3a 20 20 20 20 20 20 20 72 65 73 32 20 3d 20 72  :       res2 = r
10c70 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
10c80 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f  ;.  }..  /* Undo
10c90 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
10ca0 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
10cb0 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
10cc0 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
10cd0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
10ce0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
10cf0 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d  ) == (flags1 & M
10d00 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e  EM_Dyn) );.  pIn
10d10 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  1->flags = flags
10d20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  1;.  assert( (pI
10d30 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10d40 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20  Dyn) == (flags3 
10d50 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10d60 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn3->flags = fl
10d70 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ags3;..  if( pOp
10d80 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
10d90 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
10da0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10db0 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  2];.    iCompare
10dc0 20 3d 20 72 65 73 3b 0a 20 20 20 20 72 65 73 32   = res;.    res2
10dd0 20 3d 20 72 65 73 32 21 3d 30 3b 20 20 2f 2a 20   = res2!=0;  /* 
10de0 46 6f 72 20 74 68 69 73 20 70 61 74 68 20 72 65  For this path re
10df0 73 32 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  s2 must be exact
10e00 6c 79 20 30 20 6f 72 20 31 20 2a 2f 0a 20 20 20  ly 0 or 1 */.   
10e10 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
10e20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29  SQLITE_KEEPNULL)
10e30 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  !=0 ){.      /* 
10e40 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  The KEEPNULL fla
10e50 67 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71  g prevents OP_Eq
10e60 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
10e70 67 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a  g a NULL with 1.
10e80 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65        ** and pre
10e90 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d  vents OP_Ne from
10ea0 20 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c   overwriting NUL
10eb0 4c 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20  L with 0.  This 
10ec0 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73  flag.      ** is
10ed0 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f   only used in co
10ee0 6e 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74  ntexts where eit
10ef0 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20  her:.      **   
10f00 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26  (1) op==OP_Eq &&
10f10 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c   (r[P2]==NULL ||
10f20 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20   r[P2]==0).     
10f30 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50   **   (2) op==OP
10f40 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Ne && (r[P2]==N
10f50 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29  ULL || r[P2]==1)
10f60 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66  .      ** Theref
10f70 6f 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65  ore it is not ne
10f80 63 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b  cessary to check
10f90 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10fa0 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20  r[P2] for.      
10fb0 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20  ** NULL. */.    
10fc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
10fd0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20  pcode==OP_Ne || 
10fe0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10ff0 45 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Eq );.      asse
11000 72 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72  rt( res2==0 || r
11010 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  es2==1 );.      
11020 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
11030 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
11040 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
11050 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
11060 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
11070 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11080 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
11090 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 && pOp->opco
110a0 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
110b0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
110c0 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==1 && pOp->opc
110d0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
110e0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
110f0 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65  code==OP_Eq)==re
11100 73 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  s2 ) break;.    
11110 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  }.    memAboutTo
11120 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
11130 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
11140 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
11150 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
11160 69 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45  i = res2;.    RE
11170 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
11180 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
11190 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
111a0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
111b0 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
111c0 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
111d0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29  ;.    if( res2 )
111e0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
111f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
11200 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11210 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f  * Opcode: ElseNo
11220 74 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  tEq * P2 * * *.*
11230 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
11240 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c   must immediatel
11250 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c  y follow an OP_L
11260 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61  t or OP_Gt compa
11270 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a  rison operator..
11280 2a 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20  ** If result of 
11290 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
112a0 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  son on the same 
112b0 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  two operands.** 
112c0 77 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55  would have be NU
112d0 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c  LL or false (0),
112e0 20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20   then then jump 
112f0 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
11300 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f  e result of an O
11310 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Eq comparison 
11320 6f 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69  on the two previ
11330 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  ous operands.** 
11340 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
11350 74 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66  true (1), then f
11360 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
11370 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45  case OP_ElseNotE
11380 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61  q: {       /* sa
11390 6d 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c  me as TK_ESCAPE,
113a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
113b0 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
113c0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
113d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c  opcode==OP_Lt ||
113e0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
113f0 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65  =OP_Gt );.  asse
11400 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26  rt( pOp[-1].p5 &
11410 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
11420 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
11430 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30  aken(iCompare!=0
11440 2c 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d  , 2);.  if( iCom
11450 70 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a  pare!=0 ) goto j
11460 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
11470 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
11480 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
11490 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
114a0 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
114b0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
114c0 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
114d0 74 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a  tor in the next.
114e0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
114f0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11500 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
11510 65 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a  e P4 operand..**
11520 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
11530 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
11540 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
11550 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74   OP_Compare that
11560 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c   has.** the OPFL
11570 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
11580 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61  et in P5. Typica
11590 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
115a0 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a  tation should .*
115b0 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74  * occur immediat
115c0 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
115d0 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a   OP_Compare..**.
115e0 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74  ** The first int
115f0 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69  eger in the P4 i
11600 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20  nteger array is 
11610 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  the length of th
11620 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64  e array.** and d
11630 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70  oes not become p
11640 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75  art of the permu
11650 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  tation..*/.case 
11660 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
11670 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
11680 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
11690 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
116a0 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
116b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
116c0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70  .opcode==OP_Comp
116d0 61 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  are );.  assert(
116e0 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46   pOp[1].p5 & OPF
116f0 4c 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20  LAG_PERMUTE );. 
11700 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11710 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
11720 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
11730 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50  Synopsis: r[P1@P
11740 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a  3] <-> r[P2@P3].
11750 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
11760 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
11770 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
11780 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
11790 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
117a0 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
117b0 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
117c0 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
117d0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
117e0 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
117f0 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
11800 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
11810 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
11820 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
11830 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
11840 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
11850 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
11860 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
11870 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
11880 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
11890 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
118a0 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
118b0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
118c0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
118d0 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
118e0 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
118f0 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
11900 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
11910 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
11920 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
11930 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
11940 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
11950 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
11960 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
11970 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
11980 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
11990 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
119a0 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
119b0 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
119c0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
119d0 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
119e0 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
119f0 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
11a00 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
11a10 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
11a20 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
11a30 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
11a40 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
11a50 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
11a60 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
11a70 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
11a80 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
11a90 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
11aa0 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
11ab0 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
11ac0 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
11ad0 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
11ae0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11af0 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
11b00 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
11b10 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
11b20 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
11b30 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
11b40 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
11b50 74 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  te;     /* The p
11b60 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20  ermutation */.. 
11b70 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
11b80 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
11b90 3d 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75  =0 ){.    aPermu
11ba0 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  te = 0;.  }else{
11bb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
11bc0 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
11bd0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
11be0 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69  de==OP_Permutati
11bf0 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  on );.    assert
11c00 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
11c10 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
11c20 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20  .    aPermute = 
11c30 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20  pOp[-1].p4.ai + 
11c40 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  1;.    assert( a
11c50 50 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20  Permute!=0 );.  
11c60 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  }.  n = pOp->p3;
11c70 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
11c80 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
11c90 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
11ca0 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
11cb0 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
11cc0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
11cd0 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66   pOp->p2;.#ifdef
11ce0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
11cf0 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
11d00 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
11d10 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
11d20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
11d30 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
11d40 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11d50 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11d60 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11d70 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11d80 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11d90 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
11da0 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
11db0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11dc0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11dd0 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11de0 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
11df0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11e00 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11e10 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
11e20 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11e30 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
11e40 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11e50 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11e60 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11e70 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11e80 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11e90 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
11ea0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11eb0 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
11ec0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11ed0 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
11ee0 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
11ef0 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
11f00 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
11f10 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11f20 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
11f30 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
11f40 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11f50 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
11f60 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11f70 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11f80 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11f90 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
11fa0 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
11fb0 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
11fc0 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
11fd0 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
11fe0 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
11ff0 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
12000 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
12010 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
12020 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
12030 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  k;.    }.  }.  b
12040 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12050 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
12060 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12070 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
12080 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
12090 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
120a0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
120b0 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
120c0 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
120d0 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
120e0 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
120f0 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
12100 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
12110 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
12120 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
12130 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
12140 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
12150 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
12160 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
12170 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
12180 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
12190 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
121a0 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
121b0 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
121c0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
121d0 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
121e0 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
121f0 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
12200 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12210 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
12220 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
12230 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12240 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
12250 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12260 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12270 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
12280 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12290 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
122a0 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
122b0 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
122c0 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
122d0 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
122e0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
122f0 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
12300 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
12310 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
12320 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
12330 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12340 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12350 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
12360 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
12370 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
12380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
12390 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
123a0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
123b0 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
123c0 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
123d0 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
123e0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
123f0 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
12400 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
12410 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
12420 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
12430 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12440 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
12450 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
12460 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
12470 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
12480 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12490 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
124a0 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
124b0 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
124c0 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
124d0 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
124e0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
124f0 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
12500 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
12510 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
12520 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
12530 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
12540 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
12550 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
12560 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
12570 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12580 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
12590 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
125a0 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
125b0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
125c0 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
125d0 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
125e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
125f0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
12600 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
12610 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
12620 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
12630 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12640 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
12650 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
12660 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
12670 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
12680 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
12690 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
126a0 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
126b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
126c0 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
126d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
126e0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
126f0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
12700 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
12710 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
12720 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
12730 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
12740 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12750 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
12760 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12770 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
12780 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
12790 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
127a0 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
127b0 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
127c0 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
127d0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
127e0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
127f0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
12800 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
12810 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
12820 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
12830 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
12840 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
12850 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12860 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
12870 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
12880 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
12890 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
128a0 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
128b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
128c0 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
128d0 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
128e0 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
128f0 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
12900 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
12910 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12920 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
12930 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
12940 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
12950 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
12960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12970 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
12980 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
12990 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
129a0 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
129b0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
129c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
129d0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
129e0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
129f0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
12a00 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
12a10 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
12a20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
12a30 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
12a40 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
12a50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12a60 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12a70 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12a80 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
12a90 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12aa0 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12ab0 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12ac0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12ad0 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12ae0 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12af0 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12b00 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12b10 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12b20 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12b30 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12b40 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12b60 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12b70 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12b80 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12b90 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12ba0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12bb0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12bc0 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12bd0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12be0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12bf0 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12c00 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12c10 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12c20 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12c30 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12c40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12c50 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12c60 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
12c70 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
12c80 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
12c90 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69  ion the first ti
12ca0 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  me this opcode i
12cb0 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64  s.** encountered
12cc0 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74   on each invocat
12cd0 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d  ion of the byte-
12ce0 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a  code program.  J
12cf0 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20  ump to P2.** on 
12d00 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61  the second and a
12d10 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e  ll subsequent en
12d20 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20  counters during 
12d30 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74  the same invocat
12d40 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c  ion..**.** Top-l
12d50 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65  evel programs de
12d60 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e  termine first in
12d70 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70  vocation by comp
12d80 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20  aring the P1.** 
12d90 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20  operand against 
12da0 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f  the P1 operand o
12db0 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12dc0 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69  code at the begi
12dd0 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20  nning.** of the 
12de0 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65  program.  If the
12df0 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65   P1 values diffe
12e00 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  r, then fall thr
12e10 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a  ough and make.**
12e20 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20   the P1 of this 
12e30 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20  opcode equal to 
12e40 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69  the P1 of OP_Ini
12e50 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73  t.  If P1 values
12e60 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   are.** the same
12e70 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
12e80 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73  ump..**.** For s
12e90 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72  ubprograms, ther
12ea0 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69  e is a bitmask i
12eb0 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20  n the VdbeFrame 
12ec0 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a  that determines.
12ed0 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
12ee0 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c  t the jump shoul
12ef0 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65  d be taken.  The
12f00 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65   bitmask is nece
12f10 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65  ssary.** because
12f20 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69   the self-alteri
12f30 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f  ng code trick do
12f40 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20  es not work for 
12f50 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69  recursive.** tri
12f60 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ggers..*/.case O
12f70 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
12f80 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
12f90 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20  .  u32 iAddr;   
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12fb0 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20  Address of this 
12fc0 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
12fd0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b   assert( p->aOp[
12fe0 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  0].opcode==OP_In
12ff0 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  it );.  if( p->p
13000 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64  Frame ){.    iAd
13010 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  dr = (int)(pOp -
13020 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66   p->aOp);.    if
13030 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f  ( (p->pFrame->aO
13040 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28  nce[iAddr/8] & (
13050 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29  1<<(iAddr & 7)))
13060 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62  !=0 ){.      Vdb
13070 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
13080 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13090 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
130a0 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e  .    p->pFrame->
130b0 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c  aOnce[iAddr/8] |
130c0 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29  = 1<<(iAddr & 7)
130d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
130e0 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d  f( p->aOp[0].p1=
130f0 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  =pOp->p1 ){.    
13100 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
13110 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
13120 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
13130 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65      }.  }.  Vdbe
13140 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32  BranchTaken(0, 2
13150 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  );.  pOp->p1 = p
13160 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62  ->aOp[0].p1;.  b
13170 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13180 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
13190 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
131a0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
131b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
131c0 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
131d0 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
131e0 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
131f0 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
13200 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
13210 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13220 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13230 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13240 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13250 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
13260 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
13270 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
13280 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13290 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
132a0 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
132b0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
132c0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
132d0 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
132e0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
132f0 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
13300 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
13310 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
13320 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
13330 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
13340 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  on-zero..*/.case
13350 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
13360 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
13370 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
13380 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
13390 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
133a0 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
133b0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
133c0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
133d0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
133e0 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
133f0 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
13400 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
13410 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
13420 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
13430 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
13440 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
13450 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
13460 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
13470 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
13480 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
13490 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
134a0 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65  = !c;.  }.  Vdbe
134b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30  BranchTaken(c!=0
134c0 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b  , 2);.  if( c ){
134d0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
134e0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
134f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13500 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
13510 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
13520 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
13530 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
13540 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
13550 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13560 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
13570 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
13580 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13590 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
135a0 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
135b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
135c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
135d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
135e0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
135f0 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
13600 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
13610 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
13620 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
13630 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13640 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13650 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
13660 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
13670 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
13680 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
13690 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
136a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
136b0 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
136c0 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
136d0 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
136e0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
136f0 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
13700 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
13710 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
13720 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
13730 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
13740 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13750 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
13760 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13770 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
13780 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13790 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
137a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
137b0 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33  NullRow P1 P2 P3
137c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
137d0 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20  : if P1.nullRow 
137e0 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c  then r[P3]=NULL,
137f0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43   goto P2.**.** C
13800 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20  heck the cursor 
13810 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  P1 to see if it 
13820 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
13830 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20  nting at a NULL 
13840 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73  row..** If it is
13850 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73  , then set regis
13860 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61  ter P3 to NULL a
13870 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  nd jump immediat
13880 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
13890 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20   P1 is not on a 
138a0 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66  NULL row, then f
138b0 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68  all through with
138c0 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a  out making any.*
138d0 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61  * changes..*/.ca
138e0 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a  se OP_IfNullRow:
138f0 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
13900 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
13910 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
13920 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
13930 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
13940 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c  sr[pOp->p1]->nul
13950 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
13960 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13970 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  l(aMem + pOp->p3
13980 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
13990 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
139a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
139b0 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
139c0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
139d0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a  psis: r[P3]=PX.*
139e0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
139f0 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
13a00 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
13a10 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
13a20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
13a30 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
13a40 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
13a50 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
13a60 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
13a70 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
13a80 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
13a90 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
13aa0 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
13ab0 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
13ac0 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
13ad0 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
13ae0 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
13af0 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
13b00 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
13b10 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
13b20 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
13b30 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
13b40 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
13b50 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63  **.** If the rec
13b60 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  ord contains few
13b70 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
13b80 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
13b90 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
13ba0 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
13bb0 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
13bc0 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
13bd0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
13be0 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
13bf0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
13c00 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
13c10 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
13c20 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
13c30 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
13c40 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
13c50 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
13c60 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
13c70 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
13c80 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
13c90 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
13ca0 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
13cb0 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
13cc0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13cd0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
13ce0 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
13cf0 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
13d00 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
13d10 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
13d20 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
13d30 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
13d40 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
13d50 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   then.** the res
13d60 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
13d70 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
13d80 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
13d90 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
13da0 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
13db0 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
13dc0 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
13dd0 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
13de0 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
13df0 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
13e00 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
13e10 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
13e20 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
13e30 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
13e40 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
13e50 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
13e60 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
13e70 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
13e80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
13e90 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
13ea0 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
13eb0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
13ec0 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
13ed0 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
13ee0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
13ef0 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
13f00 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
13f10 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
13f20 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
13f30 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
13f40 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
13f50 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
13f60 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
13f70 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
13f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
13f90 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
13fa0 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
13fb0 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
13fc0 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
13fd0 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
13fe0 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
13ff0 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
14000 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
14010 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
14020 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
14030 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
14040 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
14050 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
14060 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
14070 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
14080 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
14090 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
140a0 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
140b0 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
140c0 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
140d0 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
140e0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
140f0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
14100 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  a */.  u64 offse
14110 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
14120 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
14130 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
14140 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14150 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
14160 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
14170 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
14180 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
14190 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
141a0 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
141b0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
141c0 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
141d0 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
141e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
141f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d  pOp->p1];.  p2 =
14200 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20   pOp->p2;..  /* 
14210 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
14220 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72  che is stale, br
14230 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
14240 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
14250 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
14260 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
14270 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
14280 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14290 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
142a0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
142b0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
142c0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
142d0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
142e0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
142f0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
14300 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
14310 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
14320 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
14330 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
14340 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
14350 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
14360 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
14370 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
14380 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
14390 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
143a0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
143b0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
143c0 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
143d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
143e0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
143f0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
14400 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
14410 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
14420 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14440 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
14450 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
14460 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
14470 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
14480 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
14490 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
144a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
144b0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
144c0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
144d0 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e   = &aMem[pC->uc.
144e0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
144f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14500 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
14510 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
14520 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
14530 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
14540 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
14550 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
14560 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
14570 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
14580 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
14590 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
145a0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
145b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
145c0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
145d0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
145e0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
145f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
14600 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
14610 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
14620 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14630 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
14640 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
14650 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
14660 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
14670 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
14680 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
14690 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
146a0 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
146b0 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
146c0 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
146d0 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
146e0 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
146f0 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
14700 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
14710 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  il<=65536 );  /*
14720 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
14730 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
14740 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
14750 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
14760 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
14770 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43    pC->szRow = pC
14780 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
14790 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
147a0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
147b0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
147c0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
147d0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
147e0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
147f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14800 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
14810 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  avail;.      }. 
14820 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
14830 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
14840 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
14850 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
14860 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
14870 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20  w, offset);.    
14880 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
14890 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b   0;.    aOffset[
148a0 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20  0] = offset;... 
148b0 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
148c0 73 65 74 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50  set ){      /*OP
148d0 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
148e0 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70  LSE*/.      /* p
148f0 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
14900 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
14910 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
14920 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
14930 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
14940 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
14950 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
14960 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
14970 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
14980 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
14990 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
149a0 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
149b0 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
149c0 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
149d0 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
149e0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
149f0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
14a00 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
14a10 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20  zRow = 0;..     
14a20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
14a30 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
14a40 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
14a50 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
14a60 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44  ader..      ** D
14a70 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
14a80 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
14a90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14aa0 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  n..      **.    
14ab0 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
14ac0 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
14ad0 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
14ae0 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
14af0 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20  5 byte.      ** 
14b00 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
14b10 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
14b20 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
14b30 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
14b40 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d  of.      ** them
14b50 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
14b60 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   So the maximum 
14b70 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65  header length re
14b80 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20  sults from a.   
14b90 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
14ba0 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
14bb0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
14bc0 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
14bd0 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65  three.      ** e
14be0 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
14bf0 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
14c00 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
14c10 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
14c20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
14c30 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
14c40 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d   || offset > pC-
14c50 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a  >payloadSize ){.
14c60 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
14c70 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
14c80 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
14c90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14ca0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
14cb0 65 6c 73 65 20 69 66 28 20 6f 66 66 73 65 74 3e  else if( offset>
14cc0 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  0 ){ /*OPTIMIZAT
14cd0 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20  ION-IF-TRUE*/.  
14ce0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
14cf0 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20  wing goto is an 
14d00 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49  optimization.  I
14d10 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64  t can be omitted
14d20 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 65 76   and.      ** ev
14d30 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74  erything will st
14d40 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f  ill work.  But O
14d50 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73  P_Column is meas
14d60 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20  urably faster.  
14d70 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69      ** by skippi
14d80 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  ng the subsequen
14d90 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77  t conditional, w
14da0 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  hich is always t
14db0 72 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  rue..      */.  
14dc0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14dd0 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73 65  aRow;.      asse
14de0 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  rt( pC->nHdrPars
14df0 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20  ed<=p2 );       
14e00 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c    /* Conditional
14e10 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20   skipped */.    
14e20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
14e30 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20  _read_header;.  
14e40 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61    }.  }..  /* Ma
14e50 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
14e60 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
14e70 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
14e80 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
14e90 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
14ea0 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
14eb0 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
14ec0 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
14ed0 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
14ee0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
14ef0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
14f00 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
14f10 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
14f20 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
14f30 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
14f40 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
14f50 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
14f60 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
14f70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
14f80 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
14f90 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66  >iHdrOffset<aOff
14fa0 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  set[0] ){.      
14fb0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61  /* Make sure zDa
14fc0 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f  ta points to eno
14fd0 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ugh of the recor
14fe0 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
14ff0 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  eader. */.      
15000 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
15010 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
15020 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
15030 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
15040 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
15050 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
15060 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
15070 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26  0, aOffset[0], &
15080 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
15090 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
150a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
150b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
150c0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
150d0 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
150e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
150f0 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
15100 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
15110 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
15120 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
15130 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
15140 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
15150 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
15160 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
15170 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
15180 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
15190 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
151a0 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
151b0 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
151c0 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
151d0 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
151e0 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
151f0 74 5b 30 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  t[0];.      do{.
15200 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d          if( (t =
15210 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
15220 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
15230 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
15240 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
15250 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
15260 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
15270 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15280 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
15290 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
152a0 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
152b0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
152c0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
152d0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
152e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
152f0 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d    pC->aType[i++]
15300 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f   = t;.        aO
15310 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
15320 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66  (offset64 & 0xff
15330 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d  ffffff);.      }
15340 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
15350 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
15360 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
15370 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
15380 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
15390 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
153a0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
153b0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
153c0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
153d0 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
153e0 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
153f0 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
15400 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
15410 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
15420 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
15430 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
15440 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
15450 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
15460 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
15470 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
15480 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
15490 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
154a0 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
154b0 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
154c0 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
154d0 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
154e0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
154f0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
15500 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15510 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15520 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15530 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15540 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15550 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
15560 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15570 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
15580 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
15590 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
155a0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
155b0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
155c0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
155d0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
155e0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
155f0 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
15600 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
15610 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
15620 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
15630 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
15640 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
15650 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
15660 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
15670 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
15680 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
15690 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
156a0 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
156b0 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
156c0 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
156d0 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
156e0 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
156f0 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
15700 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
15710 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
15720 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
15730 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
15740 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15750 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
15760 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
15770 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
15780 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15790 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
157a0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
157b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
157c0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
157d0 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
157e0 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
157f0 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
15800 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
15810 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
15820 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
15830 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
15840 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
15850 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
15860 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
15870 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
15880 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
15890 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
158a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
158b0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
158c0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
158d0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
158e0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
158f0 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
15900 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
15910 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
15920 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
15930 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15940 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15950 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
15960 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
15970 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
15980 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
15990 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
159a0 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
159b0 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
159c0 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
159d0 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
159e0 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
159f0 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
15a00 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
15a10 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
15a20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15a30 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
15a40 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
15a50 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
15a60 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
15a70 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
15a80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15a90 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
15aa0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
15ab0 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
15ac0 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
15ad0 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
15ae0 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
15af0 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
15b00 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
15b10 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
15b20 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
15b30 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
15b40 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15b50 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
15b60 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
15b70 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15b80 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
15b90 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
15ba0 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
15bb0 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
15bc0 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
15bd0 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
15be0 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15bf0 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
15c00 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
15c10 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
15c20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
15c30 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
15c40 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15c50 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
15c60 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
15c70 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
15c80 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15c90 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
15ca0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
15cb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
15cc0 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
15cd0 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
15ce0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
15cf0 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
15d00 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
15d10 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15d20 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
15d30 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15d40 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15d50 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
15d60 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
15d70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
15d80 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
15d90 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
15da0 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
15db0 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
15dc0 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
15dd0 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
15de0 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
15df0 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
15e00 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
15e10 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
15e20 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
15e30 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15e40 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
15e50 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
15e60 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
15e70 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
15e80 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
15e90 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
15ea0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
15eb0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
15ec0 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
15ed0 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
15ee0 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
15ef0 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
15f00 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
15f10 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
15f20 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
15f30 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
15f40 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
15f50 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
15f60 6d 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a  m disk. .      *
15f70 2a 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f  *.      ** Altho
15f80 75 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53  ugh sqlite3VdbeS
15f90 65 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72  erialGet() may r
15fa0 65 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79  ead at most 8 by
15fb0 74 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  tes from the.   
15fc0 20 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73     ** buffer pas
15fd0 73 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67  sed to it, debug
15fe0 67 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64  ging function Vd
15ff0 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
16000 28 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20  () may.      ** 
16010 72 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53  read up to 16. S
16020 6f 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f  o 16 bytes of bo
16030 67 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73  gus content is s
16040 75 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a  upplied..      *
16050 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75  /.      static u
16060 38 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a  8 aZero[16];  /*
16070 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67   This is the bog
16080 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  us content */.  
16090 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
160a0 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20  erialGet(aZero, 
160b0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
160c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
160d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
160e0 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e  romBtree(pC->uc.
160f0 70 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74  pCursor, aOffset
16100 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74  [p2], len, pDest
16110 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
16120 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
16130 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
16140 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
16150 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
16160 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
16170 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
16180 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
16190 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
161a0 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
161b0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
161c0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
161d0 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
161e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
161f0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
16200 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
16210 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
16220 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
16230 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
16240 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
16250 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
16260 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
16270 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
16280 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
16290 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
162a0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
162b0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
162c0 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65  he N-th characte
162d0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
162e0 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
162f0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
16300 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
16310 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74  used for the N-t
16320 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
16330 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
16340 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
16350 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ty: {.  const ch
16360 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
16370 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
16380 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
16390 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  /..  zAffinity =
163a0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
163b0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21  sert( zAffinity!
163c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
163d0 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
163e0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
163f0 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a  [pOp->p2]==0 );.
16400 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
16410 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a 20  Op->p1];.  do{. 
16420 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
16430 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
16440 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
16450 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
16460 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
16470 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
16480 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
16490 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
164a0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
164b0 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pIn1++;.  }while
164c0 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
164d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
164e0 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
164f0 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
16500 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
16510 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
16520 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
16530 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
16540 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
16550 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
16560 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
16570 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
16580 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
16590 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
165a0 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
165b0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
165c0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
165d0 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
165e0 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
165f0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
16600 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
16610 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
16620 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 6f  N-th character o
16630 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
16640 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
16650 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
16660 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
16670 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a  d for the N-th.*
16680 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
16690 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
166a0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
166b0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
166c0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
166d0 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
166e0 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
166f0 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
16700 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
16710 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
16720 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
16730 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
16740 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB..*/.case O
16750 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
16760 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64    u8 *zNewRecord
16770 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75  ;        /* A bu
16780 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65  ffer to hold the
16790 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65   data for the ne
167a0 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  w record */.  Me
167b0 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
167c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
167d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20  record */.  u64 
167e0 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20  nData;          
167f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16800 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
16810 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64  ace */.  int nHd
16820 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
16830 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
16840 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
16850 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  ce */.  i64 nByt
16860 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16870 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71  * Data space req
16880 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72  uired for this r
16890 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e  ecord */.  i64 n
168a0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20  Zero;           
168b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
168c0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
168d0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
168e0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72  rd */.  int nVar
168f0 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
16900 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
16910 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f  s in a varint */
16920 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79  .  u32 serial_ty
16930 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70  pe;       /* Typ
16940 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d  e field */.  Mem
16950 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20   *pData0;       
16960 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65      /* First fie
16970 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  ld to be combine
16980 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72  d into the recor
16990 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  d */.  Mem *pLas
169a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
169b0 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74   Last field of t
169c0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
169d0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
169e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
169f0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
16a00 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61   record */.  cha
16a10 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
16a20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
16a30 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  ity string for t
16a40 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
16a50 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  nt file_format; 
16a60 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f        /* File fo
16a70 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20  rmat to use for 
16a80 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
16a90 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
16aa0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
16ab0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
16ac0 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69  [] header */.  i
16ad0 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
16ae0 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
16af0 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
16b00 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20  d[] content */. 
16b10 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20   u32 len;       
16b20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
16b30 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a  h of a field */.
16b40 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
16b50 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
16b60 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
16b70 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
16b80 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
16b90 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
16ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16bb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16bd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16be0 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
16bf0 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
16c00 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
16c10 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
16c20 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
16c30 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
16c40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c80 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
16c90 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
16ca0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
16cb0 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
16cc0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
16cd0 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
16ce0 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  forth..  **.  **
16cf0 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
16d00 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
16d10 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
16d20 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
16d30 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
16d40 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
16d50 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
16d60 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
16d70 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
16d80 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
16d90 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
16da0 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
16db0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
16dc0 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
16dd0 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
16de0 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
16df0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e00 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
16e10 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
16e20 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
16e30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16e40 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
16e50 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
16e60 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
16e70 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
16e80 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
16e90 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
16ea0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
16eb0 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
16ec0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
16ed0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
16ee0 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
16ef0 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
16f00 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
16f10 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
16f20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
16f30 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
16f40 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
16f50 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
16f60 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
16f70 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
16f80 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
16f90 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74  .  /* Identify t
16fa0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16fb0 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  er */.  assert( 
16fc0 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
16fd0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
16fe0 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
16ff0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
17000 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
17010 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
17020 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79  ut);..  /* Apply
17030 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61   the requested a
17040 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69  ffinity to all i
17050 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73  nputs.  */.  ass
17060 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
17070 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66  st );.  if( zAff
17080 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65  inity ){.    pRe
17090 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20  c = pData0;.    
170a0 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  do{.      applyA
170b0 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20  ffinity(pRec++, 
170c0 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
170d0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
170e0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
170f0 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63  ty[0]==0 || pRec
17100 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d  <=pLast );.    }
17110 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79  while( zAffinity
17120 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  [0] );.  }..#ifd
17130 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
17140 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20  _NULL_TRIM.  /* 
17150 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66  NULLs can be saf
17160 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d  ely trimmed from
17170 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
17180 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20  record, as long 
17190 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73  as.  ** as the s
171a0 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20  chema format is 
171b0 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f  2 or more and no
171c0 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65  ne of the omitte
171d0 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68  d columns.  ** h
171e0 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64  ave a non-NULL d
171f0 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41  efault value.  A
17200 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lso, the record 
17210 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77 69 74  must be left wit
17220 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20  h.  ** at least 
17230 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50  one field.  If P
17240 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c  5>0 then it will
17250 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   be one more tha
17260 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78  n the.  ** index
17270 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   of the right-mo
17280 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61  st column with a
17290 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
172a0 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28  t value */.  if(
172b0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
172c0 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66  while( (pLast->f
172d0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
172e0 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f  !=0 && nField>pO
172f0 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70  p->p5 ){.      p
17300 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46  Last--;.      nF
17310 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  ield--;.    }.  
17320 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c  }.#endif..  /* L
17330 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
17340 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
17350 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
17360 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
17370 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
17380 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
17390 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
173a0 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70  record..  */.  p
173b0 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64  Rec = pLast;.  d
173c0 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  o{.    assert( m
173d0 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
173e0 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75 54 65  );.    pRec->uTe
173f0 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  mp = serial_type
17400 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
17410 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
17420 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e  ile_format, &len
17430 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
17440 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
17450 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e  o ){.      if( n
17460 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20  Data ){.        
17470 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
17480 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65  emExpandBlob(pRe
17490 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  c) ) goto no_mem
174a0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
174b0 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
174c0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
174d0 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
174e0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
174f0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
17500 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
17510 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
17520 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
17530 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
17540 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
17550 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
17560 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
17570 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
17580 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
17590 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d  );.    if( pRec=
175a0 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b  =pData0 ) break;
175b0 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d  .    pRec--;.  }
175c0 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20  while(1);..  /* 
175d0 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
175e0 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20 68  2564-11647 The h
175f0 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
17600 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
17610 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74  t.  ** which det
17620 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61  ermines the tota
17630 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
17640 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  s in the header.
17650 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a   The varint.  **
17660 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69   value is the si
17670 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
17680 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64   in bytes includ
17690 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
176a0 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e  int.  ** itself.
176b0 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
176c0 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74  nHdr==126 );.  t
176d0 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
176e0 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72  27 );.  if( nHdr
176f0 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20  <=126 ){.    /* 
17700 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
17710 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31  */.    nHdr += 1
17720 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
17730 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61  * Rare case of a
17740 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65   really large he
17750 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72  ader */.    nVar
17760 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
17770 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
17780 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
17790 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69  t;.    if( nVari
177a0 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
177b0 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72  Len(nHdr) ) nHdr
177c0 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
177d0 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20  = nHdr+nData;.  
177e0 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e  if( nByte+nZero>
177f0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
17800 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
17810 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
17820 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d  big;.  }..  /* M
17830 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74  ake sure the out
17840 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73  put register has
17850 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20   a buffer large 
17860 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20  enough to store 
17870 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65  .  ** the new re
17880 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74  cord. The output
17890 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e   register (pOp->
178a0 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  p3) is not allow
178b0 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e  ed to.  ** be on
178c0 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72  e of the input r
178d0 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73  egisters (becaus
178e0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
178f0 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
17900 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
17910 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c  AndResize() coul
17920 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
17930 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
17940 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69   used)..  */.  i
17950 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
17960 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
17970 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
17980 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
17990 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77  _mem;.  }.  zNew
179a0 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70  Record = (u8 *)p
179b0 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72  Out->z;..  /* Wr
179c0 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a  ite the record *
179d0 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e  /.  i = putVarin
179e0 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20  t32(zNewRecord, 
179f0 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64  nHdr);.  j = nHd
17a00 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  r;.  assert( pDa
17a10 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
17a20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20  pRec = pData0;. 
17a30 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f   do{.    serial_
17a40 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65  type = pRec->uTe
17a50 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45  mp;.    /* EVIDE
17a60 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d  NCE-OF: R-06529-
17a70 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20  47362 Following 
17a80 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20  the size varint 
17a90 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a  are one or more.
17aa0 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61      ** additiona
17ab0 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
17ac0 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20  er column. */.  
17ad0 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
17ae0 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
17af0 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
17b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
17b10 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20  erial type */.  
17b20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
17b30 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20  : R-64536-51728 
17b40 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65  The values for e
17b50 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
17b60 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20  e record.    ** 
17b70 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
17b80 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a  ow the header. *
17b90 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74  /.    j += sqlit
17ba0 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28  e3VdbeSerialPut(
17bb0 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20  &zNewRecord[j], 
17bc0 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
17bd0 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
17be0 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
17bf0 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
17c00 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72   assert( i==nHdr
17c10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d   );.  assert( j=
17c20 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73  =nByte );..  ass
17c30 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
17c40 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
17c50 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
17c60 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
17c70 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
17c80 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
17c90 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
17ca0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
17cb0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
17cc0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
17cd0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
17ce0 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54    }.  REGISTER_T
17cf0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
17d00 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
17d10 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
17d20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
17d30 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
17d40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
17d50 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f  nopsis: r[P2]=co
17d60 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  unt().**.** Stor
17d70 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
17d80 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65  entries (an inte
17d90 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68  ger value) in th
17da0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
17db0 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63   .** opened by c
17dc0 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69  ursor P1 in regi
17dd0 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64  ster P2.*/.#ifnd
17de0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
17df0 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f  TREECOUNT.case O
17e00 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20  P_Count: {      
17e10 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
17e20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
17e30 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
17e40 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
17e50 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75  sr[pOp->p1]->eCu
17e60 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
17e70 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
17e80 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
17e90 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b  p1]->uc.pCursor;
17ea0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
17eb0 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30   );.  nEntry = 0
17ec0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
17ed0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
17ee0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
17ef0 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  g. */.  rc = sql
17f00 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70  ite3BtreeCount(p
17f10 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a  Crsr, &nEntry);.
17f20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
17f30 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17f40 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  or;.  pOut = out
17f50 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
17f60 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
17f70 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
17f80 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
17f90 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
17fa0 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
17fb0 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
17fc0 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
17fd0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
17fe0 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
17ff0 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
18000 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
18010 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
18020 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
18030 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
18040 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
18050 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
18060 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
18070 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
18080 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
18090 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
180a0 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
180b0 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
180e0 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
180f0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
18100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18110 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
18120 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
18130 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
18140 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
18150 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
18160 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
18170 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
18180 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
18190 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
181a0 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
181b0 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
181c0 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
181d0 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
181e0 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
181f0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
18200 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
18210 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
18220 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
18230 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
18240 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
18250 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
18260 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
18270 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
18280 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
18290 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
182a0 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
182b0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
182c0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
182d0 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
182e0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
182f0 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
18300 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
18310 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
18320 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
18330 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
18340 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
18350 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
18360 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
18370 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
18380 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
18390 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
183a0 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
183b0 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
183c0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
183d0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
183e0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
183f0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
18400 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
18410 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
18420 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
18430 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
18440 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
18450 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
18460 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18470 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
18480 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
18490 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
184a0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
184b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
184c0 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
184d0 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
184e0 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
184f0 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
18500 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
18510 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
18520 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
18530 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
18540 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
18550 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
18560 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
18570 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
18580 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
18590 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
185a0 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
185b0 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
185c0 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
185d0 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
185e0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
185f0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18600 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
18610 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18620 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
18630 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
18640 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
18670 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
18680 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
18690 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
186a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
186b0 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
186c0 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
186d0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
186e0 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
186f0 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
18700 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64  3DbMallocRawNN(d
18710 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f  b, sizeof(Savepo
18720 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20  int)+nName+1);. 
18730 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b       if( pNew ){
18740 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a  .        pNew->z
18750 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26  Name = (char *)&
18760 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20  pNew[1];.       
18770 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e   memcpy(pNew->zN
18780 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d  ame, zName, nNam
18790 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20  e+1);.    .     
187a0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
187b0 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61  s no open transa
187c0 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b  ction, then mark
187d0 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69   this as a speci
187e0 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74  al.        ** "t
187f0 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
18800 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20  oint". */.      
18810 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
18820 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
18830 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18840 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
18850 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18860 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a  nSavepoint = 1;.
18870 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
18880 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
18890 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20  vepoint++;.     
188a0 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a     }..        /*
188b0 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
188c0 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
188d0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
188e0 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
188f0 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
18900 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
18910 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
18920 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
18930 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
18940 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
18950 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
18960 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
18970 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18980 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
18990 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
189a0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
189b0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
189c0 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
189d0 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
189e0 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
189f0 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
18a00 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
18a10 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
18a20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
18a30 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
18a40 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
18a50 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
18a60 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
18a70 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
18a80 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
18a90 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
18aa0 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
18ab0 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
18ac0 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
18ad0 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
18ae0 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
18af0 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
18b00 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
18b10 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20  dbeError(p, "no 
18b20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
18b30 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
18b40 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
18b50 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
18b60 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
18b70 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
18b80 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
18b90 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
18ba0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
18bb0 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
18bc0 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
18bd0 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
18be0 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
18bf0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
18c00 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
18c10 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
18c20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
18c30 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
18c60 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
18c70 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
18c80 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
18c90 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
18ca0 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
18cb0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
18cc0 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
18cd0 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
18ce0 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
18cf0 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
18d00 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
18d10 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
18d20 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
18d30 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
18d40 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
18d50 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
18d60 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
18d70 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
18d80 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
18d90 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
18da0 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
18db0 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
18dc0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
18dd0 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
18de0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
18df0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
18e00 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18e10 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
18e20 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
18e30 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
18e40 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
18e50 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
18e60 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
18e70 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
18e80 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
18e90 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
18ea0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
18eb0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
18ec0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
18ed0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
18ee0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
18ef0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
18f00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
18f10 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
18f20 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
18f30 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
18f40 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
18f50 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
18f60 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
18f70 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
18f80 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
18f90 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
18fa0 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
18fb0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
18fc0 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
18fd0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
18fe0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
18ff0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
19000 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  es)!=0;.        
19010 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
19020 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
19030 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
19040 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
19050 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
19060 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
190a0 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
190e0 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
190f0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
19100 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
19110 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19120 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
19140 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
19150 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
19160 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
19170 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
19180 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
19190 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
191a0 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
191b0 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
191c0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
191d0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
191e0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
191f0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
19200 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19210 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
19220 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
19230 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
19240 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
19250 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
19260 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
19270 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
19280 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
19290 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
192a0 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
192b0 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
192c0 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
192d0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
192e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
192f0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
19300 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
19310 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
19320 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
19330 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
19340 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
19350 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
19360 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
19370 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
19380 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
19390 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
193a0 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
193b0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
193c0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
193d0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
193e0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
193f0 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
19400 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
19410 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
19420 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
19430 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
19440 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
19450 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
19460 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
19470 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
19480 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
19490 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
194a0 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
194b0 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
194c0 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
194d0 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
194e0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
194f0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
19500 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
19510 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
19520 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
19530 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
19540 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
19550 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
19560 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
19570 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
19580 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
19590 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
195a0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
195b0 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
195c0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
195d0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
195e0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
195f0 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
19600 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
19610 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
19620 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
19630 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
19640 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
19650 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
19660 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
19670 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
19680 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
19690 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
196a0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
196b0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
196c0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
196d0 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
196e0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
196f0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19700 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
19710 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
19720 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
19730 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19740 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
19750 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
19760 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69   }.    }.  }.  i
19770 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
19780 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19790 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
197a0 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d   Opcode: AutoCom
197b0 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mit P1 P2 * * *.
197c0 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61  **.** Set the da
197d0 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d  tabase auto-comm
197e0 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31  it flag to P1 (1
197f0 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73   or 0). If P2 is
19800 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62   true, roll.** b
19810 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c  ack any currentl
19820 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74  y active btree t
19830 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20  ransactions. If 
19840 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
19850 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61  tive.** VMs (apa
19860 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65  rt from this one
19870 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41  ), then a ROLLBA
19880 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d  CK fails.  A COM
19890 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20  MIT fails if.** 
198a0 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
198b0 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20   writing VMs or 
198c0 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20  active VMs that 
198d0 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65  use shared cache
198e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
198f0 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20  truction causes 
19900 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a  the VM to halt..
19910 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43  */.case OP_AutoC
19920 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64  ommit: {.  int d
19930 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19940 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63  ;.  int iRollbac
19950 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74  k;..  desiredAut
19960 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
19970 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d  1;.  iRollback =
19980 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
19990 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
199a0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
199b0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
199c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
199d0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
199e0 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
199f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19a00 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
19a10 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
19a20 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
19a30 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
19a40 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
19a50 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69  r );..  if( desi
19a60 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64  redAutoCommit!=d
19a70 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
19a80 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61  .    if( iRollba
19a90 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ck ){.      asse
19aa0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
19ab0 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20  ommit==1 );.    
19ac0 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63    sqlite3Rollbac
19ad0 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f  kAll(db, SQLITE_
19ae0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b  ABORT_ROLLBACK);
19af0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
19b00 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
19b10 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
19b20 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62  AutoCommit && db
19b30 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
19b40 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
19b50 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
19b60 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
19b70 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
19b80 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
19b90 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
19ba0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
19bb0 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
19bc0 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
19bd0 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20  e first. .      
19be0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
19bf0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61  VdbeError(p, "ca
19c00 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
19c10 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
19c40 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
19c50 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
19c60 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
19c70 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19c80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
19c90 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20  }else if( (rc = 
19ca0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
19cb0 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
19cc0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
19cd0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
19ce0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19cf0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
19d00 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74  = (u8)desiredAut
19d10 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20  oCommit;.    }. 
19d20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
19d30 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
19d40 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
19d50 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
19d60 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
19d70 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
19d80 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
19d90 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
19da0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
19db0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
19dc0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19dd0 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73  rn;.    }.    as
19de0 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
19df0 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
19e00 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
19e10 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
19e20 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
19e30 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
19e40 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
19e50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19e60 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
19e70 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
19e80 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
19e90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
19ea0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
19eb0 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65          (!desire
19ec0 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61  dAutoCommit)?"ca
19ed0 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61  nnot start a tra
19ee0 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20  nsaction within 
19ef0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28  a transaction":(
19f00 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62  .        (iRollb
19f10 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
19f20 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
19f30 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
19f40 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
19f50 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
19f60 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
19f70 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
19f80 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
19f90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
19fa0 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ROR;.    goto ab
19fb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19fc0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19fd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
19fe0 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
19ff0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
1a000 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
1a010 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31  n on database P1
1a020 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
1a030 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  n is not already
1a040 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49  .** active..** I
1a050 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
1a060 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
1a070 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
1a080 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a  arted, or if a .
1a090 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  ** read-transact
1a0a0 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61  ion is already a
1a0b0 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67  ctive, it is upg
1a0c0 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65  raded to a write
1a0d0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a  -transaction..**
1a0e0 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
1a0f0 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e  then a read-tran
1a100 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
1a110 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
1a120 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
1a130 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
1a140 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
1a150 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
1a160 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
1a170 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
1a180 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
1a190 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
1a1a0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
1a1b0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
1a1c0 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
1a1d0 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
1a1e0 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
1a1f0 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
1a200 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
1a210 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1a220 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
1a230 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
1a240 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
1a250 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
1a260 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
1a270 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
1a280 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
1a290 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
1a2a0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
1a2b0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
1a2c0 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
1a2d0 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
1a2e0 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
1a2f0 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
1a300 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
1a310 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
1a320 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
1a330 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
1a340 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
1a350 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
1a360 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
1a370 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
1a380 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
1a390 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
1a3a0 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d  ws the changes m
1a3b0 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56  ade by this.** V
1a3c0 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
1a3d0 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
1a3e0 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
1a3f0 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
1a400 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
1a410 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
1a420 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
1a430 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
1a440 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1a450 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
1a460 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
1a470 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
1a480 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ts..**.** If P5!
1a490 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
1a4a0 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20  ode also checks 
1a4b0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1a4c0 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20  e against P3.** 
1a4d0 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67  and the schema g
1a4e0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1a4f0 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a  r against P4..**
1a500 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
1a510 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
1a520 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
1a530 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
1a540 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
1a550 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
1a560 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
1a570 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
1a580 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
1a590 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
1a5a0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
1a5b0 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
1a5c0 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68  ema.  If the sch
1a5d0 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e  ema.** cookie in
1a5e0 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P3 differs from
1a5f0 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1a600 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ie in the databa
1a610 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20  se header or.** 
1a620 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  if the schema ge
1a630 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1a640 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66   in P4 differs f
1a650 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a  rom the current.
1a660 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
1a670 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53  unter, then an S
1a680 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
1a690 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64  or is raised and
1a6a0 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61   execution.** ha
1a6b0 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  lts.  The sqlite
1a6c0 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72  3_step() wrapper
1a6d0 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
1a6e0 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74  then reprepare t
1a6f0 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  he.** statement 
1a700 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f  and rerun it fro
1a710 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  m the beginning.
1a720 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
1a730 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
1a740 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69  ee *pBt;.  int i
1a750 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
1a760 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
1a770 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1a780 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
1a790 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32  ly==0 || pOp->p2
1a7a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a7b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1a7c0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
1a7d0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1a7e0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1a7f0 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
1a800 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
1a810 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  & (db->flags & S
1a820 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29  QLITE_QueryOnly)
1a830 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
1a840 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b  SQLITE_READONLY;
1a850 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
1a860 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a870 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  }.  pBt = db->aD
1a880 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
1a890 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
1a8a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a8b0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42  reeBeginTrans(pB
1a8c0 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  t, pOp->p2);.   
1a8d0 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
1a8e0 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53  QLITE_BUSY_SNAPS
1a8f0 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63  HOT );.    testc
1a900 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1a910 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b  BUSY_RECOVERY );
1a920 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1a930 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1a940 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
1a950 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
1a960 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
1a970 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
1a980 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
1a990 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  rc;.        goto
1a9a0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a9b0 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
1a9c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a9d0 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
1a9e0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
1a9f0 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
1aa00 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
1aa10 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
1aa20 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
1aa30 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
1aa40 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
1aa50 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
1aa60 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
1aa70 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
1aa80 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1aa90 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
1aaa0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
1aab0 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
1aac0 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
1aad0 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
1aae0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
1aaf0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
1ab00 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
1ab10 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1ab20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
1ab30 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
1ab40 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
1ab50 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
1ab60 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
1ab70 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ab80 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1ab90 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
1aba0 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
1abb0 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
1abc0 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
1abd0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
1abe0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
1abf0 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
1ac00 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
1ac10 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
1ac20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
1ac30 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
1ac40 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
1ac50 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
1ac60 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1ac70 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
1ac80 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
1ac90 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
1aca0 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
1acb0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
1acc0 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1acd0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
1ace0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
1acf0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61      }..    /* Ga
1ad00 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20  ther the schema 
1ad10 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
1ad20 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20  or checking:.   
1ad30 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
1ad40 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35  ON-OF: R-03189-5
1ad50 31 31 33 35 20 41 73 20 65 61 63 68 20 53 51 4c  1135 As each SQL
1ad60 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
1ad70 20 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20   the schema.    
1ad80 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68  ** version is ch
1ad90 65 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20  ecked to ensure 
1ada0 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  that the schema 
1adb0 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20  has not changed 
1adc0 73 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a  since the.    **
1add0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
1ade0 61 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20  as prepared..   
1adf0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42   */.    sqlite3B
1ae00 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
1ae10 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45   BTREE_SCHEMA_VE
1ae20 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69  RSION, (u32 *)&i
1ae30 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20  Meta);.    iGen 
1ae40 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
1ae50 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e  1].pSchema->iGen
1ae60 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65  eration;.  }else
1ae70 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65  {.    iGen = iMe
1ae80 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73  ta = 0;.  }.  as
1ae90 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1aea0 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
1aeb0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69  =P4_INT32 );.  i
1aec0 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69  f( pOp->p5 && (i
1aed0 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c  Meta!=pOp->p3 ||
1aee0 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69   iGen!=pOp->p4.i
1aef0 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
1af00 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
1af10 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
1af20 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
1af30 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
1af40 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
1af50 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
1af60 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
1af70 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
1af80 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1af90 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
1afa0 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
1afb0 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
1afc0 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
1afd0 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
1afe0 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
1aff0 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
1b000 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
1b010 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
1b020 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
1b030 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
1b040 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
1b050 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
1b060 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
1b070 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
1b080 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
1b090 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
1b0a0 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
1b0b0 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
1b0c0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
1b0d0 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
1b0e0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
1b0f0 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
1b100 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
1b110 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
1b120 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
1b130 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
1b140 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
1b150 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1b160 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
1b170 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
1b180 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
1b190 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
1b1a0 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
1b1b0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
1b1c0 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
1b1d0 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
1b1e0 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
1b1f0 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
1b200 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
1b210 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
1b220 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
1b230 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
1b240 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
1b250 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
1b260 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
1b270 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
1b280 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
1b290 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
1b2a0 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69     }.    p->expi
1b2b0 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  red = 1;.    rc 
1b2c0 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
1b2d0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1b2e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1b2f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1b300 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1b310 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
1b320 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
1b330 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
1b340 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
1b350 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
1b360 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
1b370 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
1b380 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1b390 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
1b3a0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
1b3b0 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
1b3c0 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
1b3d0 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
1b3e0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
1b3f0 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
1b400 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1b410 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1b420 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1b430 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
1b440 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
1b450 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
1b460 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
1b470 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1b480 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
1b490 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
1b4a0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
1b4b0 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
1b4c0 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
1b4d0 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
1b4e0 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1b4f0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
1b500 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
1b510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
1b520 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ut2 */.  int iMe
1b530 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
1b540 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
1b550 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1b560 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d  eader );.  iDb =
1b570 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f   pOp->p1;.  iCoo
1b580 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1b590 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1b5a0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
1b5b0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
1b5c0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1b5d0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b5e0 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
1b5f0 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
1b600 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1b610 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1b620 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65  Db) );..  sqlite
1b630 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62  3BtreeGetMeta(db
1b640 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
1b650 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29  iCookie, (u32 *)
1b660 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20  &iMeta);.  pOut 
1b670 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
1b680 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
1b690 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20  ->u.i = iMeta;. 
1b6a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b6b0 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20  code: SetCookie 
1b6c0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1b6d0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74  ** Write the int
1b6e0 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e  eger value P3 in
1b6f0 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  to cookie number
1b700 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20   P2 of database 
1b710 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20  P1..** P2==1 is 
1b720 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1b730 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68  on.  P2==2 is th
1b740 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
1b750 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74  t..** P2==3 is t
1b760 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
1b770 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73  ager cache .** s
1b780 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
1b790 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65  h.  P1==0 is the
1b7a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1b7b0 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1b7c0 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73   the .** databas
1b7d0 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
1b7e0 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
1b7f0 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74  ables..**.** A t
1b800 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
1b810 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
1b820 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  e executing this
1b830 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
1b840 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b   OP_SetCookie: {
1b850 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73  .  Db *pDb;.  as
1b860 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
1b870 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1b880 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
1b890 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1b8a0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
1b8b0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1b8c0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1b8d0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
1b8e0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
1b8f0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
1b900 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
1b910 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1b920 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
1b930 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1b940 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1b950 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20  db, pOp->p1, 0) 
1b960 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
1b970 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
1b980 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
1b990 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
1b9a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
1b9b0 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
1b9c0 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e  , pOp->p2, pOp->
1b9d0 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p3);.  if( pOp->
1b9e0 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
1b9f0 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
1ba00 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
1ba10 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
1ba20 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
1ba30 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
1ba40 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
1ba50 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1ba60 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  cookie = pOp->p3
1ba70 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
1ba80 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
1ba90 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
1baa0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1bab0 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
1bac0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
1bad0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
1bae0 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
1baf0 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
1bb00 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70  >file_format = p
1bb10 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66  Op->p3;.  }.  if
1bb20 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
1bb30 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
1bb40 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
1bb50 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
1bb60 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
1bb70 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
1bb80 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
1bb90 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
1bba0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
1bbb0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
1bbc0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
1bbd0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
1bbe0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1bbf0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1bc00 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1bc10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1bc20 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
1bc30 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1bc40 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1bc50 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1bc60 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
1bc70 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
1bc80 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
1bc90 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
1bca0 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
1bcb0 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
1bcc0 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
1bcd0 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
1bce0 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
1bcf0 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
1bd00 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
1bd10 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
1bd20 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
1bd30 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
1bd40 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
1bd50 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
1bd60 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
1bd70 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
1bd80 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
1bd90 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
1bda0 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
1bdb0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
1bdc0 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
1bdd0 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
1bde0 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
1bdf0 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
1be00 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
1be10 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
1be20 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
1be30 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1be40 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
1be50 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
1be60 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
1be70 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
1be80 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
1be90 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
1bea0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
1beb0 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
1bec0 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
1bed0 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
1bee0 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
1bef0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
1bf00 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
1bf10 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
1bf20 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
1bf30 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
1bf40 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
1bf50 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
1bf60 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
1bf70 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
1bf80 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
1bf90 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
1bfa0 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
1bfb0 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
1bfc0 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
1bfd0 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
1bfe0 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
1bff0 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
1c000 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
1c010 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
1c020 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
1c030 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
1c040 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
1c050 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
1c060 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
1c070 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
1c080 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
1c090 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
1c0a0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
1c0b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1c0c0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1c0d0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
1c0e0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
1c0f0 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
1c100 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
1c110 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
1c120 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
1c130 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1c140 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1c150 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
1c160 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
1c170 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1c180 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1c190 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
1c1a0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
1c1b0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1c1c0 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  he table..**.** 
1c1d0 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72  See also: OpenWr
1c1e0 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a  ite, ReopenIdx.*
1c1f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f  /./* Opcode: Reo
1c200 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20  penIdx P1 P2 P3 
1c210 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1c220 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1c230 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  3.**.** The Reop
1c240 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72  enIdx opcode wor
1c250 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
1c260 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20  ReadOpen except 
1c270 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a  that it first.**
1c280 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
1c290 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20  f the cursor on 
1c2a0 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  P1 is already op
1c2b0 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70  en with a root p
1c2c0 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  age.** number of
1c2d0 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73   P2 and if it is
1c2e0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63   this opcode bec
1c2f0 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49  omes a no-op.  I
1c300 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a  n other words,.*
1c310 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  * if the cursor 
1c320 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c  is already open,
1c330 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69   do not reopen i
1c340 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  t..**.** The Reo
1c350 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61  penIdx opcode ma
1c360 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77  y only be used w
1c370 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69  ith P5==0 and wi
1c380 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61  th P4 being.** a
1c390 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65   P4_KEYINFO obje
1c3a0 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65  ct.  Furthermore
1c3b0 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d  , the P3 value m
1c3c0 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20  ust be the same 
1c3d0 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65  as.** every othe
1c3e0 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f  r ReopenIdx or O
1c3f0 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20  penRead for the 
1c400 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  same cursor numb
1c410 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68  er..**.** See th
1c420 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64  e OpenRead opcod
1c430 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
1c440 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1c450 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
1c460 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72  * Opcode: OpenWr
1c470 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ite P1 P2 P3 P4 
1c480 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1c490 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1c4a0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1c4b0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61  /write cursor na
1c4c0 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61  med P1 on the ta
1c4d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1c4e0 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  se root.** page 
1c4f0 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35  is P2.  Or if P5
1c500 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74  !=0 use the cont
1c510 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1c520 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a  P2 to find the.*
1c530 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a  * root page..**.
1c540 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1c550 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1c560 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1c570 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1c580 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1c590 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1c5a0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1c5b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1c5c0 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
1c5d0 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
1c5e0 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
1c5f0 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
1c600 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
1c610 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
1c620 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
1c630 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
1c640 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1c650 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1c660 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
1c670 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1c680 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ns in the table,
1c690 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61   or to the.** la
1c6a0 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61  rgest index of a
1c6b0 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ny column of the
1c6c0 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61   table that is a
1c6d0 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a  ctually used..**
1c6e0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1c6f0 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20  tion works just 
1c700 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78  like OpenRead ex
1c710 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65  cept that it ope
1c720 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a  ns the cursor.**
1c730 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d   in read/write m
1c740 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65  ode.  For a give
1c750 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63  n table, there c
1c760 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  an be one or mor
1c770 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63  e read-only.** c
1c780 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67  ursors or a sing
1c790 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75  le read/write cu
1c7a0 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74  rsor but not bot
1c7b0 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
1c7c0 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63  o OpenRead..*/.c
1c7d0 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  ase OP_ReopenIdx
1c7e0 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
1c7f0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1c800 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b  yInfo;.  int p2;
1c810 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1c820 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
1c830 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
1c840 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
1c850 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pDb;..  assert(
1c860 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1c870 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53  Op->p5==OPFLAG_S
1c880 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72  EEKEQ );.  asser
1c890 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1c8a0 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20  P4_KEYINFO );.  
1c8b0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
1c8c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
1c8d0 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67  pCur && pCur->pg
1c8e0 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70  noRoot==(u32)pOp
1c8f0 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65  ->p2 ){.    asse
1c900 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70  rt( pCur->iDb==p
1c910 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f  Op->p3 );      /
1c920 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20  * Guaranteed by 
1c930 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1c940 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f  or */.    goto o
1c950 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1c960 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49  ints;.  }.  /* I
1c970 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1c980 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  not currently op
1c990 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e  en or is open on
1c9a0 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a   a different.  *
1c9b0 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61  * index, then fa
1c9c0 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
1c9d0 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66  OP_OpenRead to f
1c9e0 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f  orce a reopen */
1c9f0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
1ca00 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
1ca10 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28  rite:..  assert(
1ca20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ca30 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f  _OpenWrite || pO
1ca40 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1ca50 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1ca60 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1ca70 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1ca80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1ca90 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65  pcode==OP_OpenRe
1caa0 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ad || pOp->opcod
1cab0 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a  e==OP_ReopenIdx.
1cac0 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e            || p->
1cad0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
1cae0 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64    if( p->expired
1caf0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1cb00 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
1cb10 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  CK;.    goto abo
1cb20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1cb30 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1cb40 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1cb50 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1cb60 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1cb70 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1cb80 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1cb90 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1cba0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1cbb0 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1cbc0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1cbd0 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
1cbe0 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
1cbf0 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
1cc00 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1cc10 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
1cc20 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46  .    assert( OPF
1cc30 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42  LAG_FORDELETE==B
1cc40 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29  TREE_FORDELETE )
1cc50 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42  ;.    wrFlag = B
1cc60 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f  TREE_WRCSR | (pO
1cc70 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46  p->p5 & OPFLAG_F
1cc80 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61  ORDELETE);.    a
1cc90 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1cca0 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1ccb0 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1ccc0 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1ccd0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1cce0 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1ccf0 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1cd00 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1cd10 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1cd20 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1cd30 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1cd40 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1cd50 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1cd60 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1cd70 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1cd80 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1cd90 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1cda0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
1cdb0 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32  sor) );.    pIn2
1cdc0 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20   = &aMem[p2];.  
1cdd0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
1cde0 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20  alid(pIn2) );.  
1cdf0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
1ce00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1ce10 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )!=0 );.    sqli
1ce20 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1ce30 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
1ce40 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
1ce50 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  u.i;.    /* The 
1ce60 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20  p2 value always 
1ce70 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69  comes from a pri
1ce80 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  or OP_CreateTabl
1ce90 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20  e opcode and.   
1cea0 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20   ** that opcode 
1ceb0 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20  will always set 
1cec0 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20  the p2 value to 
1ced0 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73  2 or more or els
1cee0 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49  e fail..    ** I
1cef0 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66  f there were a f
1cf00 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70  ailure, the prep
1cf10 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77  ared statement w
1cf20 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64  ould have halted
1cf30 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72  .    ** before r
1cf40 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73  eaching this ins
1cf50 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  truction. */.   
1cf60 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29   assert( p2>=2 )
1cf70 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1cf80 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1cf90 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
1cfa0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1cfb0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65  eyInfo;.    asse
1cfc0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1cfd0 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1cfe0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1cff0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1d000 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49    nField = pKeyI
1d010 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79  nfo->nField+pKey
1d020 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20  Info->nXField;. 
1d030 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1d040 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1d050 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1d060 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1d070 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d080 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1d090 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1d0a0 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1d0b0 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1d0c0 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1d0d0 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1d0e0 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1d0f0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1d100 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1d110 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1d120 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1d130 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1d140 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1d150 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1d160 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1d170 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1d180 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1d190 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d1a0 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c  BUG.  pCur->wrFl
1d1b0 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e  ag = wrFlag;.#en
1d1c0 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
1d1d0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1d1e0 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1d1f0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1d200 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1d210 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1d220 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1d230 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1d240 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1d250 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1d260 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1d270 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1d280 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1d290 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1d2a0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1d2b0 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1d2c0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1d2d0 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1d2e0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1d2f0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1d300 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1d310 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1d320 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1d330 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1d340 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1d350 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1d360 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1d370 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1d380 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1d390 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1d3a0 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1d3b0 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1d3c0 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1d3d0 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1d3e0 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1d3f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1d400 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63  OR_HINTS.  testc
1d410 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f  ase( pOp->p2 & O
1d420 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1d430 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
1d440 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46  BtreeCursorHintF
1d450 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43  lags(pCur->uc.pC
1d460 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d480 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
1d490 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52   (OPFLAG_BULKCSR
1d4a0 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1d4b0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1d4c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d4d0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1d4e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1d4f0 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20  enDup P1 P2 * * 
1d500 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
1d510 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68 61  ew cursor P1 tha
1d520 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1d530 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74  same ephemeral t
1d540 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f  able as.** curso
1d550 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63 75  r P2.  The P2 cu
1d560 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1d570 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20  een opened by a 
1d580 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68  prior OP_OpenEph
1d590 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65  emeral.** opcode
1d5a0 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  .  Only ephemera
1d5b0 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65  l cursors may be
1d5c0 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a   duplicated..**.
1d5d0 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70 68  ** Duplicate eph
1d5e0 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61  emeral cursors a
1d5f0 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66  re used for self
1d600 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69  -joins of materi
1d610 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f  alized views..*/
1d620 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70  .case OP_OpenDup
1d630 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d640 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54   *pOrig;    /* T
1d650 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73  he original curs
1d660 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61  or to be duplica
1d670 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1d680 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f  sor *pCx;      /
1d690 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72  * The new cursor
1d6a0 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70   */..  pOrig = p
1d6b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d  ->apCsr[pOp->p2]
1d6c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72 69  ;.  assert( pOri
1d6d0 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f  g->pBtx!=0 );  /
1d6e0 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c  * Only ephemeral
1d6f0 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20   cursors can be 
1d700 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20  duplicated */.. 
1d710 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1d720 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1d730 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c  , pOrig->nField,
1d740 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1d750 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1d760 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1d770 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1d780 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1d790 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70  hemeral = 1;.  p
1d7a0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1d7b0 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  Orig->pKeyInfo;.
1d7c0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1d7d0 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b   pOrig->isTable;
1d7e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1d7f0 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67  treeCursor(pOrig
1d800 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1d810 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1d820 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d830 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d              pCx-
1d840 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e  >pKeyInfo, pCx->
1d850 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f  uc.pCursor);.  /
1d860 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72  * The sqlite3Btr
1d870 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69  eeCursor() routi
1d880 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  ne can only fail
1d890 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
1d8a0 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65  ursor.  ** opene
1d8b0 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
1d8c0 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69  .  Since there i
1d8d0 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65  s already an ope
1d8e0 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68  n cursor when th
1d8f0 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69  is.  ** opcode i
1d900 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74  s run, the sqlit
1d910 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1d920 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
1d930 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1d940 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61  ITE_OK );.  brea
1d950 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1d960 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1d970 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1d980 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1d990 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1d9a0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1d9b0 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1d9c0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1d9d0 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1d9e0 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1d9f0 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1da00 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1da10 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1da20 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1da30 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1da40 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1da50 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1da60 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1da70 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1da80 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1da90 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1daa0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1dab0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1dac0 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1dad0 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1dae0 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1daf0 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1db00 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1db10 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1db20 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1db30 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1db40 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1db50 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1db60 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1db70 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1db80 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1db90 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1dba0 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1dbb0 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1dbc0 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1dbd0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1dbe0 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1dbf0 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1dc00 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1dc10 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1dc20 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1dc30 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1dc40 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1dc50 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1dc60 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1dc70 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1dc80 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1dc90 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1dca0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1dcb0 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1dcc0 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1dcd0 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1dce0 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1dcf0 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1dd00 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1dd10 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1dd20 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1dd30 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1dd40 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1dd50 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1dd60 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1dd70 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1dd80 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1dd90 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1dda0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1ddb0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1ddc0 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1ddd0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1dde0 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1ddf0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1de00 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1de10 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1de20 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1de30 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1de40 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1de50 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1de60 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1de70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1de80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1de90 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1dea0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1deb0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1dec0 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1ded0 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1dee0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1def0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1df00 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1df10 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1df20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1df30 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1df40 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1df50 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20  pBtx, .         
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1df70 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1df80 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1df90 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1dfa0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1dfb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1dfc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1dfd0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1dfe0 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d  x->pBtx, 1);.  }
1dff0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1e000 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1e010 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1e020 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1e030 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1e040 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1e050 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1e060 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1e070 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1e080 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1e090 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1e0a0 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1e0b0 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1e0c0 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1e0d0 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1e0e0 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1e0f0 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1e100 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1e110 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1e120 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65     if( (pCx->pKe
1e130 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1e140 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1e150 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1e160 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1e170 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1e180 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1e190 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1e1a0 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1e1b0 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78  eTable(pCx->pBtx
1e1c0 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1e1d0 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1e1e0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1e1f0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1e200 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1e210 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1e220 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1e230 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1e240 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1e250 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1e260 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1e270 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
1e280 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1e290 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70  sor(pCx->pBtx, p
1e2a0 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52  gno, BTREE_WRCSR
1e2b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d    pKeyInfo, pCx-
1e2e0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1e2f0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
1e300 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
1e310 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1e320 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e330 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78  Cursor(pCx->pBtx
1e340 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1e350 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e370 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78            0, pCx
1e380 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1e390 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1e3a0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1e3b0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1e3c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e3d0 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72  ror;.  pCx->isOr
1e3e0 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1e3f0 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1e400 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1e410 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1e420 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1e430 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1e440 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1e450 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1e460 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1e470 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1e480 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1e490 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1e4a0 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1e4b0 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1e4c0 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1e4d0 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1e4e0 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1e4f0 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1e500 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1e510 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1e520 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1e530 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1e540 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1e550 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1e560 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1e570 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1e580 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1e590 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1e5a0 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1e5b0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1e5c0 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1e5d0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1e5e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1e5f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e600 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1e610 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e620 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1e630 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1e640 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1e650 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1e660 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1e670 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1e680 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1e690 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1e6a0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1e6b0 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1e6c0 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1e6d0 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1e6e0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1e6f0 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1e700 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20   pCx);.  if( rc 
1e710 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1e720 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1e730 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e740 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50  : SequenceTest P
1e750 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1e760 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73  nopsis: if( curs
1e770 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70  or[P1].ctr++ ) p
1e780 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  c = P2.**.** P1 
1e790 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
1e7a0 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65  or. If the seque
1e7b0 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nce counter is c
1e7c0 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a  urrently zero, j
1e7d0 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65  ump.** to P2. Re
1e7e0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
1e7f0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
1e800 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e  ump is taken, in
1e810 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74  crement the.** t
1e820 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75  he sequence valu
1e830 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1e840 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20  quenceTest: {.  
1e850 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e860 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e870 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1e880 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e890 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1e8a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1e8b0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
1e8c0 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1e8d0 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1e8e0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1e8f0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1e900 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1e910 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1e920 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1e930 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1e940 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1e950 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1e960 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1e970 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1e980 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1e990 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1e9a0 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1e9b0 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1e9c0 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1e9d0 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1e9e0 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1e9f0 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1ea00 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1ea10 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1ea20 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1ea30 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1ea40 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1ea50 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1ea60 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1ea70 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1ea80 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1ea90 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1eaa0 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1eab0 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1eac0 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1ead0 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1eae0 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1eaf0 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1eb00 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1eb10 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1eb20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1eb30 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1eb40 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1eb50 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1eb60 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1eb70 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1eb80 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1eb90 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1eba0 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1ebb0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1ebc0 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1ebd0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ebe0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1ebf0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1ec00 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1ec10 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1ec20 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1ec30 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1ec40 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55  -1, CURTYPE_PSEU
1ec50 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  DO);.  if( pCx==
1ec60 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1ec70 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1ec80 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70  = 1;.  pCx->uc.p
1ec90 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1eca0 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1ecb0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1ecc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1ecd0 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1ece0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1ecf0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1ed00 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1ed10 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1ed20 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1ed30 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1ed40 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1ed50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1ed60 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1ed70 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1ed80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1ed90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1eda0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1edb0 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1edc0 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1edd0 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1ede0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1edf0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
1ee00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1ee10 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1ee20 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
1ee30 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
1ee40 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1ee50 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
1ee60 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
1ee70 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
1ee80 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
1ee90 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1eea0 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
1eeb0 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
1eec0 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
1eed0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
1eee0 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
1eef0 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
1ef00 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
1ef10 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
1ef20 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
1ef30 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
1ef40 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
1ef50 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
1ef60 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
1ef70 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
1ef80 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
1ef90 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
1efa0 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
1efb0 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
1efc0 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
1efd0 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
1efe0 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
1eff0 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
1f000 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f010 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f020 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f030 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
1f040 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1f050 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  E );.  pC->maskU
1f060 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
1f070 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
1f080 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1f090 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1f0a0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1f0b0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1f0c0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1f0d0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1f0e0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1f0f0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1f100 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1f110 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1f120 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1f130 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1f140 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f150 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1f160 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1f170 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1f180 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1f190 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1f1a0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1f1b0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1f1c0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1f1d0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1f1e0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1f1f0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1f200 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1f210 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1f220 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1f230 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1f240 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1f250 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1f260 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1f270 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1f280 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1f290 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1f2a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1f2b0 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
1f2c0 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
1f2d0 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
1f2e0 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
1f2f0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1f300 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
1f310 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
1f320 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
1f330 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
1f340 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1f350 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
1f360 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
1f370 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
1f380 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
1f390 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c  lowed by an IdxL
1f3a0 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
1f3b0 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
1f3c0 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f  ..** The IdxLE o
1f3d0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
1f3e0 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
1f3f0 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
1f400 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20  ut the.** IdxLE 
1f410 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1f420 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
1f430 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
1f440 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
1f450 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1f460 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1f470 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
1f480 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
1f490 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
1f4a0 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
1f4b0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f4c0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1f4d0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1f4e0 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
1f4f0 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
1f500 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1f510 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
1f520 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
1f530 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1f540 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GT P1 P2 P3 P4 *
1f550 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1f560 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1f570 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f580 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1f590 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1f5a0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1f5b0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1f5c0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1f5d0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1f5e0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f5f0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1f600 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1f610 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1f620 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1f630 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1f640 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1f650 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1f660 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1f670 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1f680 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1f690 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1f6a0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1f6b0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1f6c0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1f6d0 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1f6e0 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
1f6f0 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
1f700 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1f710 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1f720 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1f730 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1f740 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1f750 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1f760 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1f770 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1f780 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1f790 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1f7a0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1f7b0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1f7c0 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1f7d0 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1f7e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f7f0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1f800 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1f810 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1f820 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20  e: SeekLT P1 P2 
1f830 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
1f840 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1f850 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1f860 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1f870 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1f880 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1f890 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1f8a0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1f8b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1f8c0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1f8d0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1f8e0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1f8f0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1f900 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1f910 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1f920 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1f930 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1f940 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1f950 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1f960 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1f970 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1f980 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1f990 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1f9a0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1f9b0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1f9c0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1f9d0 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1f9e0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1f9f0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1fa00 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1fa10 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1fa20 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1fa30 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1fa40 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
1fa50 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1fa60 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
1fa70 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
1fa80 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1fa90 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1faa0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
1fab0 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
1fac0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1fad0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1fae0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1faf0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1fb00 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32  de: SeekLE P1 P2
1fb10 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1fb20 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1fb30 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1fb40 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1fb50 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1fb60 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1fb70 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1fb80 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1fb90 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1fba0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1fbb0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1fbc0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1fbd0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1fbe0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1fbf0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1fc00 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1fc10 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1fc20 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1fc30 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1fc40 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1fc50 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1fc60 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1fc70 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1fc80 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1fc90 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1fca0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1fcb0 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
1fcc0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1fcd0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1fce0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1fcf0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1fd00 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1fd10 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1fd20 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1fd30 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1fd40 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1fd50 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1fd60 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1fd70 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1fd80 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1fd90 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1fda0 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1fdb0 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ext..**.** If th
1fdc0 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
1fdd0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1fde0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
1fdf0 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
1fe00 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
1fe10 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
1fe20 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
1fe30 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
1fe40 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
1fe50 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1fe60 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
1fe70 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
1fe80 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
1fe90 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
1fea0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
1feb0 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxGE opcode with
1fec0 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
1fed0 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47  nts..** The IdxG
1fee0 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1fef0 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
1ff00 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
1ff10 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
1ff20 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
1ff30 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
1ff40 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
1ff50 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ions..**.** See 
1ff60 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1ff70 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1ff80 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1ff90 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
1ffa0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1ffb0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1ffc0 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
1ffd0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ffe0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a  .case OP_SeekGE:
1fff0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
20000 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
20010 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
20020 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
20030 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
20040 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
20050 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  son result */.  
20060 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20  int oc;         
20070 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a     /* Opcode */.
20080 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20090 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73  ;    /* The curs
200a0 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20  or to seek */.  
200b0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
200c0 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f  ;  /* The key to
200d0 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69   seek for */.  i
200e0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
200f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
20100 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73  olumns or fields
20110 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20   in the key */. 
20120 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
20130 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
20140 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
20150 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e  to */.  int eqOn
20160 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  ly;        /* On
20170 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e  ly interested in
20180 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a   == results */..
20190 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
201a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
201b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
201c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
201d0 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
201e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
201f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
20200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
20210 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
20220 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
20230 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
20240 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
20250 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
20260 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
20270 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
20280 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
20290 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
202a0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
202b0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
202c0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
202d0 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
202e0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71  Op->opcode;.  eq
202f0 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  Only = 0;.  pC->
20300 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66  nullRow = 0;.#if
20310 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20320 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
20330 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
20340 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
20350 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
20360 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   The BTREE_SEEK_
20370 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20  EQ flag is only 
20380 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72  set on index cur
20390 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65  sors */.    asse
203a0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
203b0 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
203c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54  ->uc.pCursor, BT
203d0 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a  REE_SEEK_EQ)==0.
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c                ||
203f0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a   CORRUPT_DB );..
20400 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
20410 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
20420 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
20430 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
20440 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
20450 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
20460 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
20470 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
20480 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
20490 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
204a0 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20   so convert it. 
204b0 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
204c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
204d0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
204e0 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
204f0 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
20500 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
20510 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
20520 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29  ffinity(pIn3, 0)
20530 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79  ;.    }.    iKey
20540 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
20550 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20  tValue(pIn3);.. 
20560 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
20570 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
20580 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
20590 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
205a0 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
205b0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
205c0 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
205d0 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
205e0 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
205f0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
20600 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
20610 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
20620 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
20630 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
20640 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
20650 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
20660 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
20670 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
20680 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
20690 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
206a0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
206b0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
206c0 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
206d0 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74  hTaken(1,2); got
206e0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
206f0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
20700 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
20710 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
20720 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67  ion iKey is larg
20730 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
20740 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
20750 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
20760 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20  bstitute >= for 
20770 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20  > and < for <=. 
20780 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72  e.g. if the sear
20790 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a  ch term.      **
207a0 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20   is 4.9 and the 
207b0 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d  integer approxim
207c0 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a  ation 5:.      *
207d0 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  *.      **      
207e0 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20    (x >  4.9)    
207f0 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a  ->     (x >= 5).
20800 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
20810 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e  (x <= 4.9)    ->
20820 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20       (x <  5).  
20830 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
20840 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62   pIn3->u.r<(doub
20850 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
20860 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
20870 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
20880 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
20890 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
208a0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
208b0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
208c0 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
208d0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
208e0 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
208f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
20900 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
20910 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
20920 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
20930 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
20940 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
20950 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
20960 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
20970 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
20980 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
20990 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
209a0 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
209b0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
209c0 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c  pIn3->u.r>(doubl
209d0 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
209e0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
209f0 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b  kLE==(OP_SeekLT+
20a00 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
20a10 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d  sert( OP_SeekGT=
20a20 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29  =(OP_SeekGE+1) )
20a30 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
20a40 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ( (OP_SeekLT & 0
20a50 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
20a60 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GE & 0x0001) );.
20a70 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
20a80 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
20a90 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20  eekLT & 0x0001) 
20aa0 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  ) oc++;.      }.
20ab0 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20      } .    rc = 
20ac0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
20ad0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
20ae0 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  c.pCursor, 0, (u
20af0 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
20b00 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  );.    pC->movet
20b10 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
20b20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
20b30 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28  elete */.    if(
20b40 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20b50 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
20b60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20b70 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
20b80 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72      /* For a cur
20b90 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52  sor with the BTR
20ba0 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c  EE_SEEK_EQ hint,
20bb0 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65   only the OP_See
20bc0 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f  kGE and.    ** O
20bd0 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73  P_SeekLE opcodes
20be0 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e   are allowed, an
20bf0 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20  d these must be 
20c00 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
20c10 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61  owed.    ** by a
20c20 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50  n OP_IdxGT or OP
20c30 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72  _IdxLT opcode, r
20c40 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74  espectively, wit
20c50 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a  h the same key..
20c60 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
20c70 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
20c80 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
20c90 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
20ca0 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20  EEK_EQ) ){.     
20cb0 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20   eqOnly = 1;.   
20cc0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20cd0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47  opcode==OP_SeekG
20ce0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
20cf0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
20d00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20d10 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
20d20 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
20d30 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
20d40 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20d50 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b   pOp[1].p1==pOp[
20d60 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61  0].p1 );.      a
20d70 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32  ssert( pOp[1].p2
20d80 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20  ==pOp[0].p2 );. 
20d90 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20da0 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p3==pOp[0].p
20db0 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  3 );.      asser
20dc0 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d  t( pOp[1].p4.i==
20dd0 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20  pOp[0].p4.i );. 
20de0 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64     }..    nField
20df0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
20e00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20e10 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
20e20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
20e30 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
20e40 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
20e50 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
20e60 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
20e70 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
20e80 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
20e90 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
20ea0 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
20eb0 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
20ec0 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  f( oc==OP_SeekGT
20ed0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
20ee0 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  E ){.    **     
20ef0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
20f00 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  1;.    **   }els
20f10 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
20f20 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b  default_rc = +1;
20f30 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
20f40 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  */.    r.default
20f50 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20  _rc = ((1 & (oc 
20f60 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20  - OP_SeekLT)) ? 
20f70 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73  -1 : +1);.    as
20f80 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20f90 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGT || r.default
20fa0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
20fb0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
20fc0 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLE || r.defaul
20fd0 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
20fe0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
20ff0 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekGE || r.defau
21000 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20  lt_rc==+1 );.   
21010 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
21020 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61  SeekLT || r.defa
21030 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20  ult_rc==+1 );.. 
21040 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
21050 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
21060 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21070 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
21080 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
21090 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
210a0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
210b0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
210c0 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d  f.    r.eqSeen =
210d0 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   0;.    rc = sql
210e0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
210f0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
21100 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
21110 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
21120 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
21130 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
21140 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21150 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65  .    }.    if( e
21160 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65  qOnly && r.eqSee
21170 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  n==0 ){.      as
21180 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a  sert( res!=0 );.
21190 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f        goto seek_
211a0 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d  not_found;.    }
211b0 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72  .  }.  pC->defer
211c0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
211d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
211e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
211f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
21200 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  ST.  sqlite3_sea
21210 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
21220 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50  dif.  if( oc>=OP
21230 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65  _SeekGE ){  asse
21240 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
21250 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  E || oc==OP_Seek
21260 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  GT );.    if( re
21270 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
21280 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29  & oc==OP_SeekGT)
21290 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
212a0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
212b0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
212c0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
212d0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
212e0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
212f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21300 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
21310 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20  se{.      res = 
21320 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  0;.    }.  }else
21330 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  {.    assert( oc
21340 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f  ==OP_SeekLT || o
21350 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  c==OP_SeekLE );.
21360 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c      if( res>0 ||
21370 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
21380 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20  OP_SeekLT) ){.  
21390 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
213a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
213b0 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d  treePrevious(pC-
213c0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
213d0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
213e0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
213f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21400 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
21410 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d  {.      /* res m
21420 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
21430 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
21440 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
21450 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  eck to.      ** 
21460 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
21470 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a  he case..      *
21480 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71  /.      res = sq
21490 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
214a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
214b0 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f     }.  }.seek_no
214c0 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72  t_found:.  asser
214d0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
214e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
214f0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
21500 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f  f( res ){.    go
21510 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
21520 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c   }else if( eqOnl
21530 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  y ){.    assert(
21540 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
21550 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
21560 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
21570 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b  xGT );.    pOp++
21580 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50  ; /* Skip the OP
21590 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78  _IdxLt or OP_Idx
215a0 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  GT that follows 
215b0 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
215c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f  }../* Opcode: Fo
215d0 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
215e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
215f0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
21600 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
21610 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
21620 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
21630 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
21640 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
21650 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
21660 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
21670 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
21680 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
21690 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
216a0 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
216b0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
216c0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
216d0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
216e0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
216f0 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e  s a prefix of an
21700 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
21710 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
21720 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50  e to P2 and.** P
21730 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
21740 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
21750 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
21760 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
21770 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
21780 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
21790 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61  e it can be.** a
217a0 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66  dvanced in the f
217b0 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e  orward direction
217c0 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74  .  The Next inst
217d0 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72  ruction will wor
217e0 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68  k,.** but not th
217f0 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  e Prev instructi
21800 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
21810 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
21820 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
21830 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
21840 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
21850 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
21860 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
21870 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
21880 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
21890 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
218a0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
218b0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
218c0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
218d0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
218e0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
218f0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
21900 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
21910 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
21920 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
21930 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
21940 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
21950 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
21960 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
21970 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
21980 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
21990 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
219a0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
219b0 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
219c0 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
219d0 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
219e0 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
219f0 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
21a00 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
21a10 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
21a20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
21a30 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
21a40 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
21a50 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
21a60 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
21a70 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
21a80 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21a90 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
21aa0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
21ab0 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
21ac0 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
21ad0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
21ae0 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
21af0 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
21b00 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
21b10 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
21b20 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
21b30 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
21b40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
21b50 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20  oConflict P1 P2 
21b60 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
21b70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
21b80 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
21b90 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
21ba0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
21bb0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
21bc0 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
21bd0 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
21be0 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
21bf0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
21c00 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
21c10 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
21c20 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
21c30 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
21c40 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
21c50 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
21c60 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
21c70 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P4.** contains a
21c80 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a  ny NULL value, j
21c90 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
21ca0 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74  to P2.  If all t
21cb0 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72  erms of the.** r
21cc0 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55  ecord are not-NU
21cd0 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20  LL then a check 
21ce0 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72  is done to deter
21cf0 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20  mine if any row 
21d00 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64  in the.** P1 ind
21d10 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d  ex btree has a m
21d20 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66  atching key pref
21d30 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ix.  If there ar
21d40 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75  e no matches, ju
21d50 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  mp.** immediatel
21d60 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  y to P2.  If the
21d70 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66  re is a match, f
21d80 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
21d90 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20  leave the P1.** 
21da0 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
21db0 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  to the matching 
21dc0 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  row..**.** This 
21dd0 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61  opcode is simila
21de0 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  r to OP_NotFound
21df0 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
21e00 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  ions that the.**
21e10 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79   branch is alway
21e20 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70  s taken if any p
21e30 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63  art of the searc
21e40 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e  h key input is N
21e50 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ULL..**.** This 
21e60 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
21e70 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
21e80 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
21e90 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
21ea0 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
21eb0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
21ec0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
21ed0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
21ee0 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
21ef0 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
21f00 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
21f10 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
21f20 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  und, Found, NotE
21f30 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50  xists.*/.case OP
21f40 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20  _NoConflict:    
21f50 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
21f60 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
21f70 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
21f80 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
21f90 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
21fa0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
21fb0 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
21fc0 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65  ists;.  int take
21fd0 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  Jump;.  int ii;.
21fe0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21ff0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
22000 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
22010 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
22020 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
22030 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
22040 64 20 72 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  d r;..#ifdef SQL
22050 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70  ITE_TEST.  if( p
22060 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
22070 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69  oConflict ) sqli
22080 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
22090 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73  +;.#endif..  ass
220a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
220b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
220c0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
220d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
220e0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
220f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22100 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22110 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
22120 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
22130 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
22140 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
22150 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
22160 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
22170 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
22180 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
22190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
221a0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
221b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
221c0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69  sTable==0 );.  i
221d0 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
221e0 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  {.    r.pKeyInfo
221f0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
22200 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
22210 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
22220 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
22230 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  3;.#ifdef SQLITE
22240 5f 44 45 42 55 47 0a 20 20 20 20 66 6f 72 28 69  _DEBUG.    for(i
22250 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64  i=0; ii<r.nField
22260 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  ; ii++){.      a
22270 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22280 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29  d(&r.aMem[ii]) )
22290 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
222a0 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  (r.aMem[ii].flag
222b0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30  s & MEM_Zero)==0
222c0 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e   || r.aMem[ii].n
222d0 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
222e0 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
222f0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
22300 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20   &r.aMem[ii]);. 
22310 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
22320 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
22330 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d    pFree = 0;.  }
22340 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 65 65 20  else{.    pFree 
22350 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69  = pIdxKey = sqli
22360 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61  te3VdbeAllocUnpa
22370 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e 70  ckedRecord(pC->p
22380 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69 66  KeyInfo);.    if
22390 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
223a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
223b0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
223c0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
223d0 3b 0a 20 20 20 20 28 76 6f 69 64 29 45 78 70 61  ;.    (void)Expa
223e0 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
223f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63    sqlite3VdbeRec
22400 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
22410 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
22420 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65   pIn3->z, pIdxKe
22430 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65  y);.  }.  pIdxKe
22440 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20  y->default_rc = 
22450 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20  0;.  takeJump = 
22460 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  0;.  if( pOp->op
22470 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
22480 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
22490 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
224a0 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
224b0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
224c0 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
224d0 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
224e0 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
224f0 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
22500 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
22510 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
22520 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64  for(ii=0; ii<pId
22530 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69  xKey->nField; ii
22540 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
22550 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d  IdxKey->aMem[ii]
22560 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
22570 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b  l ){.        tak
22580 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20  eJump = 1;.     
22590 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
225a0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63  }.    }.  }.  rc
225b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
225c0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
225d0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49  ->uc.pCursor, pI
225e0 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
225f0 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20  s);.  if( pFree 
22600 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  ) sqlite3DbFreeN
22610 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  N(db, pFree);.  
22620 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
22630 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62  K ){.    goto ab
22640 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22650 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
22660 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
22670 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
22680 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
22690 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
226a0 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
226b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
226c0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
226d0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
226e0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
226f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
22700 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  d ){.    VdbeBra
22710 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79  nchTaken(already
22720 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  Exists!=0,2);.  
22730 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
22740 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
22750 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
22760 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
22770 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c  ken(takeJump||al
22780 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32  readyExists==0,2
22790 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a  );.    if( takeJ
227a0 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45  ump || !alreadyE
227b0 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
227c0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
227d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
227e0 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31  de: SeekRowid P1
227f0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
22800 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
22810 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
22820 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
22830 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
22840 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
22850 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
22860 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65  ** keys).  If re
22870 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e  gister P3 does n
22880 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
22890 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64  teger or if P1 d
228a0 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61  oes not.** conta
228b0 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
228c0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a   rowid P3 then j
228d0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
228e0 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20  to P2.  .** Or, 
228f0 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73  if P2 is 0, rais
22900 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52  e an SQLITE_CORR
22910 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
22920 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a   does contain.**
22930 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
22940 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a  owid P3 then .**
22950 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
22960 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
22970 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
22980 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
22990 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
229a0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
229b0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
229c0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
229d0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
229e0 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f  , but with OP_No
229f0 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50  tExists.** the P
22a00 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20  3 register must 
22a10 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  be guaranteed to
22a20 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
22a30 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68  ger value.  With
22a40 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c   this.** opcode,
22a50 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67   register P3 mig
22a60 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ht not contain a
22a70 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
22a80 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
22a90 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
22aa0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
22ab0 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
22ac0 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
22ad0 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
22ae0 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
22af0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
22b00 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
22b10 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
22b20 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61  t cannot be adva
22b30 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65  nced.** in eithe
22b40 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
22b50 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
22b60 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20  e Next and Prev 
22b70 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20  opcodes will.** 
22b80 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69  not work followi
22b90 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
22ba0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
22bb0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
22bc0 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65   NoConflict, See
22bd0 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63  kRowid.*/./* Opc
22be0 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50  ode: NotExists P
22bf0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
22c00 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
22c10 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
22c20 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
22c30 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
22c40 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
22c50 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
22c60 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69  .** keys).  P3 i
22c70 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77  s an integer row
22c80 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20  id.  If P1 does 
22c90 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  not contain a re
22ca0 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77  cord with.** row
22cb0 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20  id P3 then jump 
22cc0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22cd0 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73  2.  Or, if P2 is
22ce0 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20   0, raise an.** 
22cf0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65  SQLITE_CORRUPT e
22d00 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73  rror. If P1 does
22d10 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
22d20 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
22d30 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74  then .** leave t
22d40 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
22d50 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
22d60 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
22d70 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
22d80 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
22d90 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b  *.** The OP_Seek
22da0 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72  Rowid opcode per
22db0 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22dc0 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73  peration but als
22dd0 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20  o allows the.** 
22de0 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63  P3 register to c
22df0 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74  ontain a non-int
22e00 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77  eger value, in w
22e10 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75  hich case the ju
22e20 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  mp is.** always 
22e30 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63  taken.  This opc
22e40 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61  ode requires tha
22e50 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74  t P3 always cont
22e60 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
22e70 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
22e80 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
22e90 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22ea0 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
22eb0 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
22ec0 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
22ed0 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
22ee0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
22ef0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22f00 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22f10 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
22f20 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
22f30 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
22f40 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
22f50 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
22f60 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
22f70 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
22f80 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
22f90 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
22fa0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
22fb0 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
22fc0 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63  , SeekRowid.*/.c
22fd0 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64  ase OP_SeekRowid
22fe0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
22ff0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
23000 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
23010 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
23020 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34    int res;.  u64
23030 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d   iKey;..  pIn3 =
23040 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
23050 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
23060 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
23070 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
23080 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c  finity(pIn3, SQL
23090 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
230a0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
230b0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
230c0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
230d0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
230e0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
230f0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
23100 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73  NotExists */.cas
23110 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
23120 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
23130 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  , in3 */.  pIn3 
23140 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23150 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
23160 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
23170 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
23180 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23190 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
231a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
231b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
231c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
231d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
231e0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
231f0 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61   = 0;.#endif.  a
23200 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
23210 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
23220 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
23230 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
23240 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
23250 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
23260 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
23270 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79   res = 0;.  iKey
23280 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
23290 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
232a0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
232b0 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
232c0 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  0, &res);.  asse
232d0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
232e0 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20  K || res==0 );. 
232f0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
23300 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
23310 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
23320 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
23330 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
23340 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23350 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
23360 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23370 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
23380 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
23390 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
233a0 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21   res;.  if( res!
233b0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
233c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
233d0 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
233e0 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
233f0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
23400 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  PT_BKPT;.    }el
23410 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  se{.      goto j
23420 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
23430 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
23440 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23450 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
23460 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23470 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
23480 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
23490 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50  : r[P2]=cursor[P
234a0 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46  1].ctr++.**.** F
234b0 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
234c0 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
234d0 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
234e0 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
234f0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
23500 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
23510 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
23520 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
23530 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
23540 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
23550 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
23560 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
23570 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
23580 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
23590 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
235a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
235b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
235c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
235d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
235e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
235f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65  pCsr[pOp->p1]->e
23600 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
23610 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20  _VTAB );.  pOut 
23620 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
23630 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
23640 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
23650 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
23660 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
23670 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
23680 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
23690 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
236a0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
236b0 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
236c0 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
236d0 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
236e0 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
236f0 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
23700 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
23710 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
23720 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
23730 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
23740 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
23750 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
23760 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
23770 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
23780 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
23790 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
237a0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
237b0 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
237c0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
237d0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
237e0 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
237f0 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
23800 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
23810 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
23820 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
23830 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
23840 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
23850 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
23860 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
23870 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
23880 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
23890 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
238a0 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
238b0 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
238c0 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
238d0 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
238e0 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
238f0 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
23900 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
23910 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
23920 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
23930 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
23940 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
23950 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
23960 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36   /* out2 */.  i6
23970 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
23980 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
23990 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
239a0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
239b0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
239c0 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
239d0 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
239e0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
239f0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
23a00 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
23a10 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
23a20 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
23a30 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
23a40 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
23a50 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
23a60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
23a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
23a80 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
23a90 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
23aa0 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
23ab0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
23ac0 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
23ad0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
23ae0 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
23af0 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74   res = 0;.  pOut
23b00 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
23b10 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
23b20 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23b30 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23b40 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
23b50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
23b60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
23b70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23b80 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
23b90 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
23ba0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
23bb0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23bc0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
23bd0 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
23be0 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
23bf0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
23c00 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
23c10 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
23c20 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
23c30 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
23c40 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
23c50 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
23c60 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
23c70 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
23c80 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
23c90 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
23ca0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
23cb0 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
23cc0 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
23cd0 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
23ce0 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
23cf0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
23d00 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
23d10 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
23d20 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
23d30 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
23d40 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
23d50 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
23d60 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
23d70 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
23d80 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
23d90 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
23da0 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
23db0 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
23dc0 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
23dd0 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
23de0 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
23df0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
23e00 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
23e10 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
23e20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
23e30 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
23e40 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
23e50 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
23e60 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20  E_32BIT_ROWID.# 
23e70 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
23e80 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65  ID 0x7fffffff.#e
23e90 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20  lse.    /* Some 
23ea0 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61  compilers compla
23eb0 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e  in about constan
23ec0 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30  ts of the form 0
23ed0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
23ee0 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73  f..    ** Others
23ef0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
23f00 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
23f10 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c  fffLL.  The foll
23f20 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d  owing macro seem
23f30 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76  s.    ** to prov
23f40 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  ide the constant
23f50 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c   while making al
23f60 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70  l compilers happ
23f70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65  y..    */.#   de
23f80 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20  fine MAX_ROWID  
23f90 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78  (i64)( (((u64)0x
23fa0 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c  7fffffff)<<32) |
23fb0 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66   (u64)0xffffffff
23fc0 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69   ).#endif..    i
23fd0 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f  f( !pC->useRando
23fe0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
23ff0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24000 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75  eLast(pC->uc.pCu
24010 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
24020 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
24030 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
24040 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24050 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
24060 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29  .      if( res )
24070 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b  {.        v = 1;
24080 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
24090 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
240a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
240b0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
240c0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
240d0 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  id(pC->uc.pCurso
240e0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20  r) );.        v 
240f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
24100 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
24110 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
24120 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57    if( v>=MAX_ROW
24130 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
24140 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
24150 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
24160 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
24170 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
24180 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
24190 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
241a0 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65   }.    }..#ifnde
241b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
241c0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
241d0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
241e0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
241f0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
24200 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
24210 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
24220 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
24230 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65     if( p->pFrame
24240 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
24250 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
24260 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
24270 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
24280 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
24290 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
242a0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
242b0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
242c0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
242d0 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
242e0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
242f0 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
24300 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24310 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
24320 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
24330 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
24340 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
24350 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
24360 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
24370 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
24380 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
24390 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
243a0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ->p3];.        m
243b0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
243c0 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
243d0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
243e0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
243f0 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53   );..      REGIS
24400 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
24410 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
24420 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
24430 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
24440 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
24450 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
24460 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
24470 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
24480 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
24490 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
244a0 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
244b0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
244c0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
244d0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
244e0 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d  /* IMP: R-17817-
244f0 30 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20  00630 */.       
24500 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24510 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
24520 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d  }.      if( v<pM
24530 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
24540 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
24550 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a  .i + 1;.      }.
24560 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
24570 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  = v;.    }.#endi
24580 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73  f.    if( pC->us
24590 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
245a0 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45        /* IMPLEME
245b0 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37  NTATION-OF: R-07
245c0 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65  677-41881 If the
245d0 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69   largest ROWID i
245e0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20  s equal to the. 
245f0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20       ** largest 
24600 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72  possible integer
24610 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
24620 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20  75807) then the 
24630 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a  database.      *
24640 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20  * engine starts 
24650 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65  picking positive
24660 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44   candidate ROWID
24670 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69  s at random unti
24680 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69  l.      ** it fi
24690 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20  nds one that is 
246a0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
246b0 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  sed. */.      as
246c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
246d0 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f   );  /* We canno
246e0 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72  t be in random r
246f0 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69  owid mode if thi
24700 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20  s is.           
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52    ** an AUTOINCR
24730 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a  EMENT table. */.
24740 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
24750 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
24760 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
24770 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
24780 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d  v);.        v &=
24790 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
247a0 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65   v++;  /* Ensure
247b0 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74   that v is great
247c0 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a  er than zero */.
247d0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28        }while(  (
247e0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
247f0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
24800 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24810 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20   0, (u64)v,.    
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
24850 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  &res))==SQLITE_O
24860 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  K).            &
24870 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20  & (res==0).     
24880 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74         && (++cnt
24890 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66  <100));.      if
248a0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
248b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
248c0 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
248d0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
248e0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
248f0 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
24900 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
24910 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24920 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
24930 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
24940 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
24950 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
24960 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
24970 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
24980 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
24990 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
249a0 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
249b0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
249c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
249d0 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
249e0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
249f0 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
24a00 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
24a10 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
24a20 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
24a30 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
24a40 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
24a50 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
24a60 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
24a70 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
24a80 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
24a90 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
24aa0 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
24ab0 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
24ac0 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
24ad0 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
24ae0 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
24af0 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
24b00 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
24b10 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
24b20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
24b30 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
24b40 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
24b50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
24b60 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
24b70 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
24b80 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
24b90 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
24ba0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
24bb0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
24bc0 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
24bd0 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
24be0 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
24bf0 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
24c00 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
24c10 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
24c20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
24c30 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
24c40 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
24c50 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
24c60 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
24c70 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
24c80 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
24c90 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
24ca0 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
24cb0 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
24cc0 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
24cd0 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
24ce0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
24cf0 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
24d00 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
24d10 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
24d20 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
24d30 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
24d40 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
24d50 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
24d60 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  al to P3..**.** 
24d70 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
24d80 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
24d90 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
24da0 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
24db0 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
24dc0 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
24dd0 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
24de0 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
24df0 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
24e00 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
24e10 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
24e20 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
24e30 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
24e40 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
24e50 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
24e60 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
24e70 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73  int to a Table s
24e80 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79  tructure, or may
24e90 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
24ea0 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c  is .** not NULL,
24eb0 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
24ec0 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78  -hook (sqlite3.x
24ed0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
24ee0 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66  is invoked .** f
24ef0 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
24f00 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
24f10 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
24f20 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
24f30 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
24f40 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
24f50 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
24f60 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
24f70 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
24f80 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
24f90 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
24fa0 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
24fb0 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
24fc0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
24fd0 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
24fe0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
24ff0 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
25000 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
25010 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
25020 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
25030 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
25040 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
25050 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
25060 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
25070 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
25080 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
25090 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
250a0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
250b0 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
250c0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
250d0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20  psis: intkey=P3 
250e0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
250f0 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
25100 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
25110 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
25120 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
25130 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
25140 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
25150 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
25160 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
25170 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
25180 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
25190 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
251a0 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
251b0 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
251c0 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
251d0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
251e0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
251f0 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
25200 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
25210 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
25220 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56  he record */.  V
25230 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
25240 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
25250 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
25260 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
25270 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
25280 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
25290 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
252a0 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
252b0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
252c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
252d0 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
252e0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
252f0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
25300 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
25310 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
25320 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64  structure - used
25330 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70   by update and p
25340 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20  re-update hooks 
25350 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
25360 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
25370 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
25380 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
25390 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
253a0 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f   */.  BtreePaylo
253b0 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f  ad x;   /* Paylo
253c0 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  ad to be inserte
253d0 64 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a  d */..  op = 0;.
253e0 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
253f0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
25400 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25410 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25420 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
25430 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
25440 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
25450 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25460 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25470 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25480 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
25490 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
254a0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
254b0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
254c0 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
254d0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20   OPFLAG_ISNOOP) 
254e0 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  || pC->isTable )
254f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
25500 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
25510 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  E || pOp->p4type
25520 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20  >=P4_STATIC );. 
25530 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
25540 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
25550 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
25560 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
25570 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
25580 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
25590 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
255a0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
255b0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
255c0 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
255d0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
255e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
255f0 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  ey);.    x.nKey 
25600 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
25610 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
25620 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
25630 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
25640 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d     x.nKey = pOp-
25650 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
25660 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
25670 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44  TABLE && HAS_UPD
25680 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a  ATE_HOOK(db) ){.
25690 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
256a0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44  iDb>=0 );.    zD
256b0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
256c0 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20  iDb].zDbSName;. 
256d0 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
256e0 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65  4.pTab;.    asse
256f0 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  rt( (pOp->p5 & O
25700 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c  PFLAG_ISNOOP) ||
25710 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
25720 29 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  );.    op = ((pO
25730 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
25740 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
25750 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
25760 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c  E_INSERT);.  }el
25770 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
25780 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e  ; /* Not needed.
25790 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
257a0 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
257b0 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f  .    zDb = 0;  /
257c0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
257d0 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
257e0 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
257f0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
25800 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
25810 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
25820 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
25830 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a  e hook, if any *
25840 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
25850 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a  UpdateCallback .
25860 20 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70     && pOp->p4typ
25870 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26  e==P4_TABLE.   &
25880 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  & !(pOp->p5 & OP
25890 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20  FLAG_ISUPDATE). 
258a0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
258b0 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b  dbePreUpdateHook
258c0 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49  (p, pC, SQLITE_I
258d0 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62  NSERT, zDb, pTab
258e0 2c 20 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70  , x.nKey, pOp->p
258f0 32 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  2);.  }.  if( pO
25900 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
25910 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23  SNOOP ) break;.#
25920 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70  endif..  if( pOp
25930 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
25940 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
25950 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
25960 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
25970 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
25980 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b  tRowid = x.nKey;
25990 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
259a0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
259b0 7b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20  {.    x.pData = 
259c0 30 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d  0;.    x.nData =
259d0 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
259e0 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
259f0 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
25a00 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
25a10 20 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74    x.pData = pDat
25a20 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74  a->z;.    x.nDat
25a30 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20  a = pData->n;.  
25a40 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
25a50 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
25a60 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
25a70 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
25a80 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
25a90 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
25aa0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78  EM_Zero ){.    x
25ab0 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e  .nZero = pData->
25ac0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
25ad0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
25ae0 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20  0;.  }.  x.pKey 
25af0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
25b00 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
25b10 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
25b20 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70  x,.      (pOp->p
25b30 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
25b40 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
25b50 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65  SITION)), seekRe
25b60 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
25b70 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
25b80 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
25b90 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25ba0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
25bb0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
25bc0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
25bd0 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
25be0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25bf0 72 72 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e  rror;.  if( db->
25c00 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
25c10 26 26 20 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d  && op ){.    db-
25c20 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
25c30 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
25c40 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e   op, zDb, pTab->
25c50 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a  zName, x.nKey);.
25c60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25c70 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
25c80 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
25c90 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
25ca0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
25cb0 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
25cc0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
25cd0 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  nting..**.** If 
25ce0 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  the OPFLAG_SAVEP
25cf0 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74  OSITION bit of t
25d00 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
25d10 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20  is set, then.** 
25d20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  the cursor will 
25d30 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
25d40 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65 20   at  either the 
25d50 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
25d60 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
25d70 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
25d80 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
25d90 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
25da0 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
25db0 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
25dc0 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
25dd0 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20  e a no-op. As a 
25de0 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20  result, in this 
25df0 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b  case.** it is ok
25e00 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63   to delete a rec
25e10 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
25e20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20  a Next loop. If 
25e30 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  .** OPFLAG_SAVEP
25e40 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50  OSITION bit of P
25e50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  5 is clear, then
25e60 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
25e70 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61   be.** left in a
25e80 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
25e90 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
25ea0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
25eb0 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
25ec0 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  5, that indicate
25ed0 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64  s that this.** d
25ee0 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76  elete one of sev
25ef0 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20  eral associated 
25f00 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20  with deleting a 
25f10 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c  table row and al
25f20 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  l its.** associa
25f30 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65  ted index entrie
25f40 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  s.  Exactly one 
25f50 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73  of those deletes
25f60 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72 79   is the "primary
25f70 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68  ".** delete.  Th
25f80 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c  e others are all
25f90 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45   on OPFLAG_FORDE
25fa0 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20  LETE cursors or 
25fb0 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b  else are.** mark
25fc0 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58 44  ed with the AUXD
25fd0 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  ELETE flag..**.*
25fe0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25ff0 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
26000 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50  P2 (NB: P2 not P
26010 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  5) is set, then 
26020 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67  the row.** chang
26030 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  e count is incre
26040 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
26050 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
26060 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
26070 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
26080 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
26090 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
260a0 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
260b0 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
260c0 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69  NULL then it poi
260d0 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f  nts to a Table o
260e0 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63  bject. In this c
260f0 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74  ase either .** t
26100 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65  he update or pre
26110 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72  -update hook, or
26120 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e   both, may be in
26130 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75  voked. The P1 cu
26140 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76  rsor must.** hav
26150 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
26160 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  d using OP_NotFo
26170 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
26180 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
26190 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61  e in .** this ca
261a0 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79  se. Specifically
261b0 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  , if one is conf
261c0 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d  igured, the pre-
261d0 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a  update hook is .
261e0 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34  ** invoked if P4
261f0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68   is not NULL. Th
26200 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73  e update-hook is
26210 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20   invoked if one 
26220 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a  is configured, .
26230 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  ** P4 is not NUL
26240 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41  L, and the OPFLA
26250 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69  G_NCHANGE flag i
26260 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a  s set in P2..**.
26270 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
26280 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
26290 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65  s set in P2, the
262a0 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  n P3 contains th
262b0 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20  e address.** of 
262c0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
262d0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
262e0 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  e value that the
262f0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
26300 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74  w will.** be set
26310 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74   to by the updat
26320 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
26330 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
26340 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73  rsor *pC;.  cons
26350 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54  t char *zDb;.  T
26360 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e  able *pTab;.  in
26370 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70  t opflags;..  op
26380 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b  flags = pOp->p2;
26390 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
263a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
263b0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
263c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
263d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
263e0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
263f0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
26400 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
26410 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
26420 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
26430 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26440 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26450 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ==0 );..#ifdef S
26460 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
26470 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
26480 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f  4_TABLE && HasRo
26490 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62  wid(pOp->p4.pTab
264a0 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ) && pOp->p5==0 
264b0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20  ){.    /* If p5 
264c0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65  is zero, the see
264d0 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74  k operation that
264e0 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
264f0 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a  cursor prior to.
26500 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65      ** OP_Delete
26510 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20   will have also 
26520 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
26530 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
26540 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20  o the rowid of. 
26550 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68     ** the row th
26560 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  at is being dele
26570 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69  ted */.    i64 i
26580 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Key = sqlite3Btr
26590 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
265a0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
265b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f    assert( pC->mo
265c0 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79  vetoTarget==iKey
265d0 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
265e0 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
265f0 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75  te-hook or pre-u
26600 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20  pdate-hook will 
26610 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20  be invoked, set 
26620 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20  zDb to.  ** the 
26630 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74  name of the db t
26640 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e  o pass as to it.
26650 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20   Also set local 
26660 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20  pTab to a copy. 
26670 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20   ** of p4.pTab. 
26680 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69  Finally, if p5 i
26690 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69  s true, indicati
266a0 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75 72  ng that this cur
266b0 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73  sor was.  ** las
266c0 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f  t moved with OP_
266d0 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c  Next or OP_Prev,
266e0 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74   not Seek or Not
266f0 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a  Found, set .  **
26700 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65   VdbeCursor.move
26710 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65 20  toTarget to the 
26720 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20  current rowid.  
26730 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
26740 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
26750 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f  & HAS_UPDATE_HOO
26760 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73  K(db) ){.    ass
26770 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
26780 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
26790 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29  Op->p4.pTab!=0 )
267a0 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
267b0 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
267c0 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
267d0 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
267e0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
267f0 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f   & OPFLAG_SAVEPO
26800 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43  SITION)!=0 && pC
26810 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
26820 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
26830 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72  get = sqlite3Btr
26840 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
26850 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
26860 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
26870 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e   zDb = 0;   /* N
26880 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
26890 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
268a0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70  arning. */.    p
268b0 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  Tab = 0;  /* Not
268c0 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
268d0 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
268e0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69  ning. */.  }..#i
268f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
26900 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
26910 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  K.  /* Invoke th
26920 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  e pre-update-hoo
26930 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
26940 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
26950 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
26960 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 29  & pOp->p4.pTab )
26970 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  {.    assert( !(
26980 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
26990 5f 49 53 55 50 44 41 54 45 29 20 0a 20 20 20 20  _ISUPDATE) .    
269a0 20 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69 64       || HasRowid
269b0 28 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20 20  (pTab)==0 .     
269c0 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70      || (aMem[pOp
269d0 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p3].flags & ME
269e0 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a 20  M_Int) .    );. 
269f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
26a00 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70  eUpdateHook(p, p
26a10 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c  C,.        (opfl
26a20 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  ags & OPFLAG_ISU
26a30 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
26a40 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
26a50 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20  DELETE, .       
26a60 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e   zDb, pTab, pC->
26a70 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20  movetoTarget,.  
26a80 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20        pOp->p3.  
26a90 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f    );.  }.  if( o
26aa0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
26ab0 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a  ISNOOP ) break;.
26ac0 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e  #endif. .  /* On
26ad0 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63 61  ly flags that ca
26ae0 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41 56  n be set are SAV
26af0 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55  EPOISTION and AU
26b00 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73  XDELETE */ .  as
26b10 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
26b20 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f   ~(OPFLAG_SAVEPO
26b30 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55  SITION|OPFLAG_AU
26b40 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a  XDELETE))==0 );.
26b50 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
26b60 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42  _SAVEPOSITION==B
26b70 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
26b80 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  N );.  assert( O
26b90 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d  PFLAG_AUXDELETE=
26ba0 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45  =BTREE_AUXDELETE
26bb0 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
26bc0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
26bd0 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20  ->pFrame==0 ){. 
26be0 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68     if( pC->isEph
26bf0 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20  emeral==0.      
26c00 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20    && (pOp->p5 & 
26c10 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
26c20 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20  )==0.        && 
26c30 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50  (pC->wrFlag & OP
26c40 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d  FLAG_FORDELETE)=
26c50 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
26c60 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b    nExtraDelete++
26c70 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
26c80 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
26c90 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
26ca0 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d    nExtraDelete--
26cb0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
26cc0 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  if..  rc = sqlit
26cd0 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
26ce0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f  ->uc.pCursor, pO
26cf0 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61  p->p5);.  pC->ca
26d00 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26d10 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73  E_STALE;.  pC->s
26d20 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
26d30 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
26d40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
26d50 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  r;..  /* Invoke 
26d60 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
26d70 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
26d80 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20    if( opflags & 
26d90 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
26da0 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
26db0 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ++;.    if( db->
26dc0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
26dd0 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  && HasRowid(pTab
26de0 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78  ) ){.      db->x
26df0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
26e00 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
26e10 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
26e20 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a  b, pTab->zName,.
26e30 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f            pC->mo
26e40 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20  vetoTarget);.   
26e50 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
26e60 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20  Db>=0 );.    }. 
26e70 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f   }..  break;.}./
26e80 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43  * Opcode: ResetC
26e90 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  ount * * * * *.*
26ea0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  *.** The value o
26eb0 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
26ec0 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
26ed0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
26ee0 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
26ef0 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
26f00 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
26f10 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
26f20 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20  _changes())..** 
26f30 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74  Then the VMs int
26f40 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75  ernal change cou
26f50 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30  nter resets to 0
26f60 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65  ..** This is use
26f70 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
26f80 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  grams..*/.case O
26f90 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a  P_ResetCount: {.
26fa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
26fb0 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
26fc0 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43  Change);.  p->nC
26fd0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
26fe0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26ff0 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20  : SorterCompare 
27000 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
27010 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79 28  ynopsis: if key(
27020 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c  P1)!=trim(r[P3],
27030 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P4) goto P2.**.*
27040 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
27050 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e   cursor. This in
27060 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72  struction compar
27070 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  es a prefix of t
27080 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f  he.** record blo
27090 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  b in register P3
270a0 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69   against a prefi
270b0 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  x of the entry t
270c0 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74  hat .** the sort
270d0 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
270e0 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20  tly points to.  
270f0 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50  Only the first P
27100 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72  4 fields.** of r
27110 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72  [P3] and the sor
27120 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63  ter record are c
27130 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  ompared..**.** I
27140 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74  f either P3 or t
27150 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69  he sorter contai
27160 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65  ns a NULL in one
27170 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66   of their signif
27180 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20  icant.** fields 
27190 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68  (not counting th
271a0 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74  e P4 fields at t
271b0 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65  he end which are
271c0 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a   ignored) then.*
271d0 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
271e0 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
271f0 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46  e equal..**.** F
27200 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e  all through to n
27210 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
27220 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  if the two recor
27230 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ds compare equal
27240 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65   to.** each othe
27250 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  r.  Jump to P2 i
27260 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65  f they are diffe
27270 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rent..*/.case OP
27280 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
27290 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
272a0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
272b0 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20   int nKeyCol;.. 
272c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
272d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
272e0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
272f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27300 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
27310 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  32 );.  pIn3 = &
27320 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
27330 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e   nKeyCol = pOp->
27340 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b  p4.i;.  res = 0;
27350 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27360 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  dbeSorterCompare
27370 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43  (pC, pIn3, nKeyC
27380 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62  ol, &res);.  Vdb
27390 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
273a0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  !=0,2);.  if( rc
273b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
273c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
273d0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
273e0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
273f0 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.};../* Opcode:
27400 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50   SorterData P1 P
27410 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
27420 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
27430 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
27440 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
27450 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72  e current sorter
27460 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72   data for sorter
27470 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
27480 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f  hen clear the co
27490 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68  lumn header cach
274a0 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a  e on cursor P3..
274b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
274c0 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73  e is normally us
274d0 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f  e to move a reco
274e0 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f  rd out of the so
274f0 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a  rter and into.**
27500 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
27510 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66   is the source f
27520 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  or a pseudo-tabl
27530 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64  e cursor created
27540 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73   using.** OpenPs
27550 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75  eudo.  That pseu
27560 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20  do-table cursor 
27570 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20  is the one that 
27580 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
27590 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33  .** parameter P3
275a0 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20  .  Clearing the 
275b0 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  P3 column cache 
275c0 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
275d0 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20  opcode saves.** 
275e0 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74  us from having t
275f0 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61  o issue a separa
27600 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72  te NullRow instr
27610 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20  uction to clear 
27620 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63  that cache..*/.c
27630 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74  ase OP_SorterDat
27640 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
27650 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d  r *pC;..  pOut =
27660 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
27670 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27680 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27690 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
276a0 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
276b0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77  te3VdbeSorterRow
276c0 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20  key(pC, pOut);. 
276d0 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c   assert( rc!=SQL
276e0 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d  ITE_OK || (pOut-
276f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
27700 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
27710 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27720 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27730 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67   );.  if( rc ) g
27740 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27750 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43  _error;.  p->apC
27760 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63  sr[pOp->p3]->cac
27770 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
27780 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b  _STALE;.  break;
27790 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
277a0 6f 77 44 61 74 61 20 50 31 20 50 32 20 50 33 20  owData P1 P2 P3 
277b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
277c0 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
277d0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
277e0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
277f0 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65 6e  plete row conten
27800 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61 74  t for the row at
27810 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73 6f   .** which curso
27820 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  r P1 is currentl
27830 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54  y pointing..** T
27840 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
27850 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
27860 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69   data.  .** It i
27870 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e  s just copied on
27880 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
27890 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
278a0 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
278b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
278c0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  le..**.** If cur
278d0 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e 64  sor P1 is an ind
278e0 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e  ex, then the con
278f0 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79 20  tent is the key 
27900 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20 49  of the row..** I
27910 66 20 63 75 72 73 6f 72 20 50 32 20 69 73 20 61  f cursor P2 is a
27920 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68 65   table, then the
27930 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63 74   content extract
27940 65 64 20 69 73 20 74 68 65 20 64 61 74 61 2e 0a  ed is the data..
27950 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
27960 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
27970 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
27980 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
27990 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
279a0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
279b0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
279c0 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74  **.** If P3!=0 t
279d0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
279e0 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 61  is allowed to ma
279f0 6b 65 20 61 6e 20 65 70 68 65 72 6d 65 72 61 6c  ke an ephermeral
27a00 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f   pointer.** into
27a10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
27a20 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73 20  ge.  That means 
27a30 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  that the content
27a40 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a   of the output.*
27a50 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c 20  * register will 
27a60 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 61  be invalidated a
27a70 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 75  s soon as the cu
27a80 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63  rsor moves - inc
27a90 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20  luding.** moves 
27aa0 63 61 75 73 65 64 20 62 79 20 6f 74 68 65 72 20  caused by other 
27ab0 63 75 72 73 6f 72 73 20 74 68 61 74 20 22 73 61  cursors that "sa
27ac0 76 65 22 20 74 68 65 20 74 68 65 20 63 75 72 72  ve" the the curr
27ad0 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70  ent cursors.** p
27ae0 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72  osition in order
27af0 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 77   that they can w
27b00 72 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65  rite to the same
27b10 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d   table.  If P3==
27b20 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79  0.** then a copy
27b30 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 73 20   of the data is 
27b40 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79  made into memory
27b50 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61 73 74  .  P3!=0 is fast
27b60 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30  er, but.** P3==0
27b70 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a   is safer..**.**
27b80 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74   If P3!=0 then t
27b90 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
27ba0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 69 73  e P2 register is
27bb0 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20   unsuitable for 
27bc0 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73  use.** in OP_Res
27bd0 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52  ult and any OP_R
27be0 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c  esult will inval
27bf0 69 64 61 74 65 20 74 68 65 20 50 32 20 72 65 67  idate the P2 reg
27c00 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a  ister content..*
27c10 2a 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65  * The P2 registe
27c20 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76  r content is inv
27c30 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f  alidated by opco
27c40 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63  des like OP_Func
27c50 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e  tion or.** by an
27c60 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72  y use of another
27c70 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
27c80 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62   to the same tab
27c90 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
27ca0 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
27cb0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
27cc0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
27cd0 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20   u32 n;..  pOut 
27ce0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
27cf0 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73  (p, pOp);..  ass
27d00 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27d10 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27d20 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27d30 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27d40 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
27d50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27d60 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27d70 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27d80 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
27d90 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73  r(pC)==0 );.  as
27da0 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
27db0 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
27dc0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
27dd0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
27de0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
27df0 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
27e00 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c  wData opcodes al
27e10 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e  ways follow OP_N
27e20 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a  otExists or.  **
27e30 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72   OP_SeekRowid or
27e40 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65   OP_Rewind/Op_Ne
27e50 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72  xt with no inter
27e60 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69  vening instructi
27e70 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69  ons.  ** that mi
27e80 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74  ght invalidate t
27e90 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20  he cursor..  ** 
27ea0 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f  If this where no
27eb0 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f  t the case, on o
27ec0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
27ed0 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77  assert()s.  ** w
27ee0 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75  ould fail.  Shou
27ef0 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61  ld this ever cha
27f00 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20  nge (because of 
27f10 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63  changes in the c
27f20 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74  ode.  ** generat
27f30 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78  or) then the fix
27f40 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73   would be to ins
27f50 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20  ert a call to.  
27f60 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ** sqlite3VdbeCu
27f70 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20  rsorMoveto()..  
27f80 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
27f90 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
27fa0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27fb0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
27fc0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
27fd0 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f   );.#if 0  /* No
27fe0 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74  t required due t
27ff0 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  o the previous t
28000 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  o assert() state
28010 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20  ments */.  rc = 
28020 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
28030 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
28040 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
28050 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28060 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
28070 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65  if..  n = sqlite
28080 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a  3BtreePayloadSiz
28090 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20  e(pCrsr);.  if( 
280a0 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
280b0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
280c0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
280d0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
280e0 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30    testcase( n==0
280f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
28100 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
28110 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ee(pCrsr, 0, n, 
28120 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20  pOut);.  if( rc 
28130 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28140 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
28150 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70   !pOp->p3 ) Deep
28160 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
28170 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
28180 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
28190 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
281a0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
281b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
281c0 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
281d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
281e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
281f0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
28200 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
28210 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
28220 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
28230 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
28240 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
28250 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
28260 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
28270 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
28280 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
28290 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
282a0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
282b0 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
282c0 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
282d0 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
282e0 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
282f0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
28300 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
28310 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
28320 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
28330 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
28340 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
28350 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28360 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69  .  i64 v;.  sqli
28370 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
28380 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
28390 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
283a0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
283b0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
283c0 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
283d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
283e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
283f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28400 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28410 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28420 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28430 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50  rType!=CURTYPE_P
28440 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c  SEUDO || pC->nul
28450 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43  lRow );.  if( pC
28460 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
28470 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
28480 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65  EM_Null;.    bre
28490 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ak;.  }else if( 
284a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
284b0 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43  to ){.    v = pC
284c0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a  ->movetoTarget;.
284d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
284e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
284f0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
28500 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28510 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61  PE_VTAB ){.    a
28520 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56  ssert( pC->uc.pV
28530 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56  Cur!=0 );.    pV
28540 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43  tab = pC->uc.pVC
28550 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  ur->pVtab;.    p
28560 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
28570 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
28580 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
28590 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
285a0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
285b0 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26  (pC->uc.pVCur, &
285c0 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
285d0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
285e0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
285f0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
28600 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
28610 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
28620 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28630 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a  BLE */.  }else{.
28640 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
28650 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
28660 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
28670 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
28680 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
28690 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
286a0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
286b0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
286c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
286d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
286e0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
286f0 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
28700 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
28710 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
28720 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
28730 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
28740 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
28750 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
28760 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
28770 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
28780 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lRow P1 * * * *.
28790 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63  **.** Move the c
287a0 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75  ursor P1 to a nu
287b0 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f  ll row.  Any OP_
287c0 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e  Column operation
287d0 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20  s.** that occur 
287e0 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72  while the cursor
287f0 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20   is on the null 
28800 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  row will always.
28810 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e  ** write a NULL.
28820 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
28830 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Row: {.  VdbeCur
28840 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
28850 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28860 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28870 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
28880 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28890 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
288a0 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  0 );.  pC->nullR
288b0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61  ow = 1;.  pC->ca
288c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
288d0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
288e0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
288f0 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20  TYPE_BTREE ){.  
28900 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
28910 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
28920 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
28930 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75  learCursor(pC->u
28940 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  c.pCursor);.  }.
28950 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28960 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50  pcode: Last P1 P
28970 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
28980 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
28990 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
289a0 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
289b0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
289c0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
289d0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
289e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
289f0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
28a00 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
28a10 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
28a20 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
28a30 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
28a40 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
28a50 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
28a60 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
28a70 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
28a80 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28a90 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28aa0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
28ab0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
28ac0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
28ad0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
28ae0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
28af0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
28b00 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
28b10 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
28b20 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
28b30 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
28b40 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
28b50 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
28b60 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 2d 31 2c  .** If P3 is -1,
28b70 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
28b80 20 69 73 20 70 6f 73 69 74 69 6f 6e 65 64 20 61   is positioned a
28b90 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
28ba0 20 62 74 72 65 65 0a 2a 2a 20 66 6f 72 20 74 68   btree.** for th
28bb0 65 20 70 75 72 70 6f 73 65 20 6f 66 20 61 70 70  e purpose of app
28bc0 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65 6e 74  ending a new ent
28bd0 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74 72 65  ry onto the btre
28be0 65 2e 20 20 49 6e 20 74 68 61 74 0a 2a 2a 20 63  e.  In that.** c
28bf0 61 73 65 20 50 32 20 6d 75 73 74 20 62 65 20 30  ase P2 must be 0
28c00 2e 20 20 49 74 20 69 73 20 61 73 73 75 6d 65 64  .  It is assumed
28c10 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
28c20 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f   is used only fo
28c30 72 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61  r.** appending a
28c40 6e 64 20 73 6f 20 69 66 20 74 68 65 20 63 75 72  nd so if the cur
28c50 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68  sor is valid, th
28c60 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
28c70 73 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 62 65  st already.** be
28c80 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
28c90 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65   end of the btre
28ca0 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e  e and so no chan
28cb0 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a  ges are made to.
28cc0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a  ** the cursor..*
28cd0 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
28ce0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
28cf0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
28d00 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
28d10 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
28d20 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
28d30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
28d40 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
28d50 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28d60 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
28d70 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
28d80 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
28d90 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
28da0 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
28db0 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
28dc0 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
28dd0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
28de0 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65   );.  pC->seekRe
28df0 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  sult = pOp->p3;.
28e00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28e10 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
28e20 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64   = OP_Last;.#end
28e30 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  if.  if( pOp->p3
28e40 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 42  ==0 || !sqlite3B
28e50 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
28e60 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20  dNN(pCrsr) ){.  
28e70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
28e80 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
28e90 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  res);.    pC->nu
28ea0 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
28eb0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
28ec0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
28ed0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
28ee0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
28ef0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
28f00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
28f10 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 4f  rror;.    if( pO
28f20 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 20  p->p2>0 ){.     
28f30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
28f40 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
28f50 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
28f60 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
28f70 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
28f80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
28f90 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
28fa0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28fb0 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32   IfSmaller P1 P2
28fc0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73   P3 * *.**.** Es
28fd0 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65  timate the numbe
28fe0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
28ff0 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70   table P1.  Jump
29000 20 74 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a   to P2 if that.*
29010 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65  * estimate is le
29020 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d  ss than approxim
29030 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33  ately 2**(0.1*P3
29040 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  )..*/.case OP_If
29050 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20  Smaller: {      
29060 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
29070 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
29080 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
29090 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
290a0 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74  64 sz;..  assert
290b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
290c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
290d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
290e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
290f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29100 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
29110 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
29120 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
29130 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
29140 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
29150 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
29160 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29170 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
29180 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
29190 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
291a0 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73  RowCountEst(pCrs
291b0 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41  r);.    if( ALWA
291c0 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c  YS(sz>=0) && sql
291d0 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29  ite3LogEst((u64)
291e0 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65  sz)<pOp->p3 ) re
291f0 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62  s = 1;.  }.  Vdb
29200 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
29210 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
29220 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
29230 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
29240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
29250 74 65 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20  terSort P1 P2 * 
29260 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  * *.**.** After 
29270 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65  all records have
29280 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69   been inserted i
29290 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f  nto the Sorter o
292a0 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66  bject.** identif
292b0 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b  ied by P1, invok
292c0 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
292d0 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65   actually do the
292e0 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d   sorting..** Jum
292f0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65  p to P2 if there
29300 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
29310 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a  to be sorted..**
29320 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
29330 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
29340 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52  OP_Sort and OP_R
29350 65 77 69 6e 64 20 74 68 61 74 20 69 73 20 75 73  ewind that is us
29360 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72  ed.** for Sorter
29370 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20   objects..*/./* 
29380 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
29390 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
293a0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
293b0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
293c0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
293d0 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
293e0 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
293f0 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
29400 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
29410 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
29420 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
29430 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
29440 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
29450 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
29460 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
29470 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
29480 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
29490 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
294a0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
294b0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
294c0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
294d0 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
294e0 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
294f0 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
29500 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
29510 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
29520 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
29530 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
29540 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
29550 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
29560 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
29570 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
29580 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
29590 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
295a0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
295b0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
295c0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
295d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
295e0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
295f0 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
29600 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
29610 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
29620 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
29630 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
29640 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
29650 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
29660 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
29670 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
29680 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
29690 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
296a0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
296b0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
296c0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
296d0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
296e0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
296f0 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
29700 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
29710 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
29720 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
29730 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
29740 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
29750 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
29760 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
29770 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
29780 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
29790 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
297a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
297b0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
297c0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
297d0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
297e0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
297f0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
29800 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
29810 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
29820 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
29830 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
29840 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
29850 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
29860 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
29870 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
29880 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
29890 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
298a0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
298b0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
298c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
298d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
298e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
298f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29900 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29910 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
29920 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
29930 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
29940 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
29950 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
29960 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
29970 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
29980 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
29990 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
299a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
299b0 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
299c0 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
299d0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
299e0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
299f0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
29a00 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
29a10 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
29a20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
29a30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
29a40 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
29a50 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
29a60 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
29a70 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
29a80 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
29a90 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
29aa0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
29ab0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
29ac0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
29ad0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
29ae0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
29af0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
29b00 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
29b10 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
29b20 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
29b30 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
29b40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29b50 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
29b60 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
29b70 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
29b80 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
29b90 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
29ba0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
29bb0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
29bc0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
29bd0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
29be0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
29bf0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
29c00 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
29c10 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
29c20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
29c30 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
29c40 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
29c50 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
29c60 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
29c70 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
29c80 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
29c90 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
29ca0 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
29cb0 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
29cc0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
29cd0 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
29ce0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
29cf0 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
29d00 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
29d10 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
29d20 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
29d30 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
29d40 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
29d50 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
29d60 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
29d70 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
29d80 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
29d90 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
29da0 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
29db0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
29dc0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
29dd0 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
29de0 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
29df0 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
29e00 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
29e10 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
29e20 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
29e30 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
29e40 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
29e50 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
29e60 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
29e70 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
29e80 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
29e90 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
29ea0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
29eb0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
29ec0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
29ed0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
29ee0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
29ef0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
29f00 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
29f10 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
29f20 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
29f30 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
29f40 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
29f50 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
29f60 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
29f70 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
29f80 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
29f90 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
29fa0 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
29fb0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
29fc0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
29fd0 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
29fe0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
29ff0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
2a000 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
2a010 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
2a020 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
2a030 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2a040 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
2a050 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2a060 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
2a070 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
2a080 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
2a090 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
2a0a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
2a0b0 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
2a0c0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
2a0d0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
2a0e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
2a0f0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
2a100 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
2a110 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
2a120 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
2a130 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2a140 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
2a150 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2a160 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
2a170 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
2a180 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
2a190 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
2a1a0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
2a1b0 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
2a1c0 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
2a1d0 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
2a1e0 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
2a1f0 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
2a200 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
2a210 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
2a220 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
2a230 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
2a240 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
2a250 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
2a260 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
2a270 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
2a280 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2a290 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
2a2a0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
2a2b0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
2a2c0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
2a2d0 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
2a2e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
2a2f0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
2a300 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
2a310 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
2a320 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
2a330 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
2a340 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
2a350 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
2a360 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
2a370 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
2a380 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
2a390 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
2a3a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
2a3b0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
2a3c0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
2a3d0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
2a3e0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
2a3f0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
2a400 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
2a410 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2a420 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
2a430 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
2a440 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
2a450 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2a460 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
2a470 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
2a480 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
2a490 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
2a4a0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
2a4b0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
2a4c0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
2a4d0 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20  terNext P1 P2 * 
2a4e0 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  * P5.**.** This 
2a4f0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
2a500 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65  t like OP_Next e
2a510 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d 75  xcept that P1 mu
2a520 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65  st be a.** sorte
2a530 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69  r object for whi
2a540 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72  ch the OP_Sorter
2a550 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20  Sort opcode has 
2a560 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  been.** invoked.
2a570 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64    This opcode ad
2a580 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f  vances the curso
2a590 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f  r to the next so
2a5a0 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20  rted.** record, 
2a5b0 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69  or jumps to P2 i
2a5c0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
2a5d0 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72  ore sorted recor
2a5e0 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ds..*/.case OP_S
2a5f0 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a  orterNext: {  /*
2a600 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2a610 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2a620 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d   res;..  pC = p-
2a630 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2a640 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2a650 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73  ter(pC) );.  res
2a660 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
2a670 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65  ite3VdbeSorterNe
2a680 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  xt(db, pC, &res)
2a690 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61  ;.  goto next_ta
2a6a0 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  il;.case OP_Prev
2a6b0 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
2a6c0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
2a6d0 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  xtIfOpen:    /* 
2a6e0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d  jump */.  if( p-
2a6f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d  >apCsr[pOp->p1]=
2a700 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
2a710 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f   Fall through */
2a720 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
2a730 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2a740 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
2a750 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2a760 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
2a770 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2a780 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2a790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2a7a0 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70  ->p5<ArraySize(p
2a7b0 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20  ->aCounter) );. 
2a7c0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2a7d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d  Op->p1];.  res =
2a7e0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
2a7f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2a800 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2a810 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2a820 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2a830 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2a840 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2a850 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65  t( res==0 || (re
2a860 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61  s==1 && pC->isTa
2a870 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73  ble==0) );.  tes
2a880 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b  tcase( res==1 );
2a890 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a8a0 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
2a8b0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a8c0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a8d0 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
2a8e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a8f0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2a900 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a910 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2a920 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  s );.  assert( p
2a930 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2a940 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  extIfOpen || pOp
2a950 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
2a960 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
2a970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2a980 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
2a990 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  vIfOpen || pOp->
2a9a0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a9b0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2a9c0 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65  s);..  /* The Ne
2a9d0 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2a9e0 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2a9f0 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64  kGT, SeekGE, and
2aa00 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68   Rewind..  ** Th
2aa10 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73  e Prev opcode is
2aa20 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
2aa30 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2aa40 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20   and Last. */.  
2aa50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2aa60 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
2aa70 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2aa80 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20  NextIfOpen.     
2aa90 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2aaa0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43  =OP_SeekGT || pC
2aab0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2aac0 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kGE.       || pC
2aad0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77  ->seekOp==OP_Rew
2aae0 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  ind || pC->seekO
2aaf0 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20  p==OP_Found);.  
2ab00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2ab10 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
2ab20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2ab30 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20  PrevIfOpen.     
2ab40 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2ab50 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43  =OP_SeekLT || pC
2ab60 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2ab70 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  kLE.       || pC
2ab80 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73  ->seekOp==OP_Las
2ab90 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70  t );..  rc = pOp
2aba0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43  ->p4.xAdvance(pC
2abb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
2abc0 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a  es);.next_tail:.
2abd0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2abe0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2abf0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2ac00 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20  en(res==0,2);.  
2ac10 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2ac20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2ac30 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
2ac40 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
2ac50 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43  w = 0;.    p->aC
2ac60 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
2ac70 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
2ac80 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
2ac90 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
2aca0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74  ;.#endif.    got
2acb0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
2acc0 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
2acd0 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
2ace0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
2acf0 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
2ad00 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2ad10 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2ad20 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
2ad30 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2ad40 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2ad50 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
2ad60 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
2ad70 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
2ad80 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
2ad90 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
2ada0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
2adb0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
2adc0 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
2add0 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
2ade0 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
2adf0 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  nil..**.** If P4
2ae00 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2ae10 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d  en it is the num
2ae20 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
2ae30 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a   the unpacked.**
2ae40 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e   key of reg(P2).
2ae50 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
2ae60 50 33 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P3 is the index 
2ae70 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 67  of the first reg
2ae80 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65  ister.** for the
2ae90 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20   unpacked key.  
2aea0 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79  The availability
2aeb0 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64   of the unpacked
2aec0 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d   key can sometim
2aed0 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69  es.** be an opti
2aee0 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  mization..**.** 
2aef0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
2af00 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20  FLAG_APPEND bit 
2af10 73 65 74 2c 20 74 68 61 74 20 69 73 20 61 20 68  set, that is a h
2af20 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
2af30 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20  e layer.** that 
2af40 74 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c  this insert is l
2af50 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
2af60 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ppend..**.** If 
2af70 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2af80 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65  G_NCHANGE bit se
2af90 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  t, then the chan
2afa0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a  ge counter is.**
2afb0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2afc0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2afd0 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
2afe0 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20  _NCHANGE bit is 
2aff0 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  clear,.** then t
2b000 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2b010 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  r is unchanged..
2b020 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
2b030 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2b040 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
2b050 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  set, the impleme
2b060 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a  ntation might.**
2b070 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61   run faster by a
2b080 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63  voiding an unnec
2b090 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63  essary seek on c
2b0a0 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76  ursor P1.  Howev
2b0b0 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  er,.** the OPFLA
2b0c0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2b0d0 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62  flag must only b
2b0e0 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68  e set if there h
2b0f0 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f  ave been no prio
2b100 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68  r.** seeks on th
2b110 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74  e cursor or if t
2b120 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  he most recent s
2b130 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65  eek used a key e
2b140 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20  quivalent.** to 
2b150 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P2. .**.** This 
2b160 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
2b170 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
2b180 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
2b190 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
2b1a0 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
2b1b0 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f   OP_Insert..*/./
2b1c0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2b1d0 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a  Insert P1 P2 * *
2b1e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b1f0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
2b200 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
2b210 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
2b220 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
2b230 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
2b240 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
2b250 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
2b260 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
2b270 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50 31  to the sorter P1
2b280 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
2b290 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f  entry is nil..*/
2b2a0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
2b2b0 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
2b2c0 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
2b2d0 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
2b2e0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2b2f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2b300 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b   BtreePayload x;
2b310 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2b320 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2b330 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2b340 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2b350 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2b360 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2b370 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
2b380 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
2b390 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2b3a0 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
2b3b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2b3c0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
2b3d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
2b3e0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
2b3f0 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
2b400 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
2b410 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  +;.  assert( pC-
2b420 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2b430 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d  PE_BTREE || pOp-
2b440 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2b450 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73  erInsert );.  as
2b460 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2b470 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
2b480 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
2b490 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2b4a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b4b0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
2b4c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2b4d0 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72  rInsert ){.    r
2b4e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2b4f0 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
2b500 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  In2);.  }else{. 
2b510 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32     x.nKey = pIn2
2b520 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20  ->n;.    x.pKey 
2b530 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78  = pIn2->z;.    x
2b540 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70  .aMem = aMem + p
2b550 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d  Op->p3;.    x.nM
2b560 65 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  em = (u16)pOp->p
2b570 34 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  4.i;.    rc = sq
2b580 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
2b590 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
2b5a0 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70   &x,.         (p
2b5b0 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
2b5c0 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53  _APPEND|OPFLAG_S
2b5d0 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a  AVEPOSITION)), .
2b5e0 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
2b5f0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
2b600 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
2b610 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
2b620 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61          );.    a
2b630 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2b640 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2b650 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
2b660 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2b670 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29  E;.  }.  if( rc)
2b680 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2b690 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2b6a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b6b0 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
2b6c0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2b6d0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33  sis: key=r[P2@P3
2b6e0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74  ].**.** The cont
2b6f0 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74  ent of P3 regist
2b700 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  ers starting at 
2b710 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d  register P2 form
2b720 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  .** an unpacked 
2b730 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20  index key. This 
2b740 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74  opcode removes t
2b750 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74  hat entry from t
2b760 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65  he .** index ope
2b770 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
2b780 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2b790 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
2b7a0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2b7b0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2b7c0 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
2b7d0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
2b7e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2b7f0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
2b800 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
2b810 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70  ->p2+pOp->p3<=(p
2b820 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
2b830 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73  ursor)+1 );.  as
2b840 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b850 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b860 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b870 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b880 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b890 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b8a0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b8b0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b8c0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2b8d0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2b8e0 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2b8f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b900 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2b910 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2b920 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2b930 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2b940 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2b950 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2b960 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2b970 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b980 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2b990 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2b9a0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2b9b0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2b9c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2b9d0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2b9e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b9f0 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2ba00 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2ba10 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2ba20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2ba30 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2ba40 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2ba50 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2ba60 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2ba70 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2ba80 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2ba90 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2baa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
2bab0 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a  k P1 * P3 P4 *.*
2bac0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65  * Synopsis: Move
2bad0 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 0a   P3 to P1.rowid.
2bae0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
2baf0 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72  pen index cursor
2bb00 20 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72   and P3 is a cur
2bb10 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  sor on the corre
2bb20 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c  sponding.** tabl
2bb30 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  e.  This opcode 
2bb40 64 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20  does a deferred 
2bb50 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74  seek of the P3 t
2bb60 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74  able cursor.** t
2bb70 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63  o the row that c
2bb80 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
2bb90 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  e current row of
2bba0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
2bbb0 69 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  is a deferred se
2bbc0 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74  ek.  Nothing act
2bbd0 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e  ually happens un
2bbe0 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  til.** the curso
2bbf0 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61  r is used to rea
2bc00 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61  d a record.  Tha
2bc10 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61  t way, if no rea
2bc20 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20  ds.** occur, no 
2bc30 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20  unnecessary I/O 
2bc40 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50  happens..**.** P
2bc50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61  4 may be an arra
2bc60 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74  y of integers (t
2bc70 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29  ype P4_INTARRAY)
2bc80 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f   containing.** o
2bc90 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
2bca0 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
2bcb0 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72  P3 table.  If ar
2bcc0 72 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a  ray entry a(i).*
2bcd0 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  * is non-zero, t
2bce0 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2bcf0 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63  mn a(i)-1 from c
2bd00 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20  ursor P3 is .** 
2bd10 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65  equivalent to pe
2bd20 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66  rforming the def
2bd30 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74  erred seek and t
2bd40 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75  hen reading colu
2bd50 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31  mn i .** from P1
2bd60 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  .  This informat
2bd70 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
2bd80 20 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20   P3 and used to 
2bd90 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64  redirect.** read
2bda0 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65  s against P3 ove
2bdb0 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f  r to P1, thus po
2bdc0 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20  ssibly avoiding 
2bdd0 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73  the need to.** s
2bde0 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72  eek and read cur
2bdf0 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70  sor P3..*/./* Op
2be00 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
2be10 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2be20 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2be30 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
2be40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
2be50 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
2be60 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
2be70 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
2be80 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
2be90 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
2bea0 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
2beb0 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
2bec0 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
2bed0 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
2bee0 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
2bef0 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
2bf00 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
2bf10 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
2bf20 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
2bf30 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
2bf40 50 5f 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f  P_Seek:.case OP_
2bf50 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  IdxRowid: {     
2bf60 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2bf70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2bf80 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20 20   *pC;           
2bf90 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69       /* The P1 i
2bfa0 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20  ndex cursor */. 
2bfb0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61   VdbeCursor *pTa
2bfc0 62 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  bCur;           
2bfd0 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20  /* The P2 table 
2bfe0 63 75 72 73 6f 72 20 28 4f 50 5f 53 65 65 6b 20  cursor (OP_Seek 
2bff0 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72  only) */.  i64 r
2c000 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
2c010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77            /* Row
2c020 69 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65  id that P1 curre
2c030 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  nt points to */.
2c040 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c050 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2c060 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2c070 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2c080 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2c090 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2c0a0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2c0b0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2c0c0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
2c0d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2c0e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2c0f0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
2c100 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2c110 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2c120 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43  );.  assert( !pC
2c130 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70  ->nullRow || pOp
2c140 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2c150 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54  Rowid );..  /* T
2c160 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20  he IdxRowid and 
2c170 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65  Seek opcodes are
2c180 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73   combined becaus
2c190 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61  e of the commona
2c1a0 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c  lity.  ** of sql
2c1b0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2c1c0 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69  store() and sqli
2c1d0 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2c1e0 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ). */.  rc = sql
2c1f0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2c200 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a  store(pC);..  /*
2c210 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f   sqlite3VbeCurso
2c220 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f  rRestore() can o
2c230 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20  nly fail if the 
2c240 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20  record has been 
2c250 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74  deleted.  ** out
2c260 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20   from under the 
2c270 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69  cursor.  That wi
2c280 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73  ll never happens
2c290 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64   for an IdxRowid
2c2a0 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70  .  ** or Seek op
2c2b0 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45  code */.  if( NE
2c2c0 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
2c2d0 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
2c2e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
2c2f0 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
2c300 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d  w ){.    rowid =
2c310 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2c320 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
2c330 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2c340 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
2c350 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
2c360 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e  owid(db, pC->uc.
2c370 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29  pCursor, &rowid)
2c380 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
2c390 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2c3a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c3b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
2c3c0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
2c3d0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a  ode==OP_Seek ){.
2c3e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
2c3f0 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p3>=0 && pOp-
2c400 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p3<p->nCursor )
2c410 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 20  ;.      pTabCur 
2c420 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2c430 70 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  p3];.      asser
2c440 74 28 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b  t( pTabCur!=0 );
2c450 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2c460 54 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65  TabCur->eCurType
2c470 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2c480 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2c490 20 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75   pTabCur->uc.pCu
2c4a0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20  rsor!=0 );.     
2c4b0 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2c4c0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
2c4d0 20 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c     pTabCur->null
2c4e0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
2c4f0 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61  TabCur->movetoTa
2c500 72 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20  rget = rowid;.  
2c510 20 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66      pTabCur->def
2c520 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b  erredMoveto = 1;
2c530 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2c540 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
2c550 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e  NTARRAY || pOp->
2c560 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20  p4.ai==0 );.    
2c570 20 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d    pTabCur->aAltM
2c580 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  ap = pOp->p4.ai;
2c590 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2c5a0 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b  pAltCursor = pC;
2c5b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2c5c0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2c5d0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2c5e0 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  .      pOut->u.i
2c5f0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
2c600 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2c610 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2c620 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2c630 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2c640 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d  MemSetNull(&aMem
2c650 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a  [pOp->p2]);.  }.
2c660 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2c670 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20  pcode: IdxGE P1 
2c680 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2c690 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2c6a0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2c6b0 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2c6c0 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2c6d0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2c6e0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2c6f0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2c700 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
2c710 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2c720 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
2c730 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
2c740 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2c750 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2c760 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2c770 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2c780 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
2c790 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
2c7a0 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2c7b0 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
2c7c0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
2c7d0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
2c7e0 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2c7f0 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
2c800 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2c810 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2c820 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
2c830 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33  : IdxGT P1 P2 P3
2c840 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2c850 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2c860 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2c870 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2c880 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2c890 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2c8a0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2c8b0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2c8c0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2c8d0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2c8e0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2c8f0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2c900 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2c910 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2c920 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2c930 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2c940 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2c950 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2c960 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2c970 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2c980 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
2c990 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2c9a0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
2c9b0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2c9c0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2c9d0 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2c9e0 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
2c9f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2ca00 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2ca10 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2ca20 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2ca30 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2ca40 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2ca50 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2ca60 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2ca70 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2ca80 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
2ca90 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2caa0 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
2cab0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2cac0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2cad0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2cae0 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
2caf0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
2cb00 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
2cb10 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2cb20 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
2cb30 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
2cb40 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
2cb50 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
2cb60 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2cb70 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
2cb80 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
2cb90 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20   IdxLE P1 P2 P3 
2cba0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2cbb0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2cbc0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2cbd0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2cbe0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2cbf0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2cc00 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2cc10 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2cc20 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2cc30 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
2cc40 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2cc50 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  st.** the index 
2cc60 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2cc70 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2cc80 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2cc90 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a  RIMARY KEY or.**
2cca0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
2ccb0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
2ccc0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
2ccd0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
2cce0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2ccf0 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2cd00 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f  jump.** to P2. O
2cd10 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2cd20 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2cd30 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2cd40 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a  /.case OP_IdxLE:
2cd50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2cd60 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
2cd70 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  GT:          /* 
2cd80 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2cd90 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20  IdxLT:          
2cda0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2cdb0 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20  OP_IdxGE:  {    
2cdc0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2cdd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2cde0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2cdf0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2ce00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ce10 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2ce20 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2ce30 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2ce40 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ce50 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2ce60 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72  ert( pC->isOrder
2ce70 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
2ce80 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2ce90 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2cea0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
2ceb0 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61  pCursor!=0);.  a
2cec0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2ced0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2cee0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cef0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
2cf00 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
2cf10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2cf20 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65  INT32 );.  r.pKe
2cf30 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2cf40 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2cf50 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
2cf60 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  i;.  if( pOp->op
2cf70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b  code<OP_IdxLT ){
2cf80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2cf90 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2cfa0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2cfb0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
2cfc0 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
2cfd0 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
2cfe0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2cff0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
2d000 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2d010 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
2d020 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2d030 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20  0;.  }.  r.aMem 
2d040 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2d050 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2d060 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
2d070 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
2d080 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
2d090 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
2d0a0 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
2d0b0 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b  endif.  res = 0;
2d0c0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2d0d0 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
2d0e0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2d0f0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
2d100 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
2d110 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c  pare(db, pC, &r,
2d120 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
2d130 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d  ( (OP_IdxLE&1)==
2d140 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20  (OP_IdxLT&1) && 
2d150 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f  (OP_IdxGE&1)==(O
2d160 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20  P_IdxGT&1) );.  
2d170 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  if( (pOp->opcode
2d180 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
2d190 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
2d1a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2d1b0 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxLE || pOp->o
2d1c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
2d1d0 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65  );.    res = -re
2d1e0 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
2d1f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2d200 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
2d210 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2d220 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65  _IdxGT );.    re
2d230 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  s++;.  }.  VdbeB
2d240 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30  ranchTaken(res>0
2d250 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
2d260 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d270 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
2d280 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  es>0 ) goto jump
2d290 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2d2a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2d2b0 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
2d2c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2d2d0 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
2d2e0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2d2f0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
2d300 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
2d310 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
2d320 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
2d330 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
2d340 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
2d350 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2d360 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
2d370 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
2d380 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
2d390 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
2d3a0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2d3b0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
2d3c0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
2d3d0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
2d3e0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
2d3f0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
2d400 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
2d410 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
2d420 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
2d430 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
2d440 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
2d450 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
2d460 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
2d470 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
2d480 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
2d490 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
2d4a0 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
2d4b0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
2d4c0 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
2d4d0 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
2d4e0 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
2d4f0 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
2d500 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
2d510 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
2d520 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
2d530 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2d540 32 2e 20 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f  2. If no page mo
2d550 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
2d560 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
2d570 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69 6e 67 20  .** table being 
2d580 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
2d590 61 64 79 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  ady the last one
2d5a0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2d5b0 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72  ) then a .** zer
2d5c0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
2d5d0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
2d5e0 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
2d5f0 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
2d600 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  ro .** is stored
2d610 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2d620 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2d630 64 65 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  de throws an err
2d640 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
2d650 61 6e 79 20 61 63 74 69 76 65 20 72 65 61 64 65  any active reade
2d660 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74  r VMs when.** it
2d670 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69   is invoked. Thi
2d680 73 20 69 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f  s is done to avo
2d690 69 64 20 74 68 65 20 64 69 66 66 69 63 75 6c 74  id the difficult
2d6a0 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
2d6b0 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20 65  h .** updating e
2d6c0 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72 73 20  xisting cursors 
2d6d0 77 68 65 6e 20 61 20 72 6f 6f 74 20 70 61 67 65  when a root page
2d6e0 20 69 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20   is moved in an 
2d6f0 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64  AUTOVACUUM .** d
2d700 61 74 61 62 61 73 65 2e 20 54 68 69 73 20 65 72  atabase. This er
2d710 72 6f 72 20 69 73 20 74 68 72 6f 77 6e 20 65 76  ror is thrown ev
2d720 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
2d730 73 65 20 69 73 20 6e 6f 74 20 61 6e 20 41 55 54  se is not an AUT
2d740 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69  OVACUUM .** db i
2d750 6e 20 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64  n order to avoid
2d760 20 69 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e 20   introducing an 
2d770 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  incompatibility 
2d780 62 65 74 77 65 65 6e 20 61 75 74 6f 76 61 63 75  between autovacu
2d790 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61  um .** and non-a
2d7a0 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e  utovacuum modes.
2d7b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2d7c0 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
2d7d0 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
2d7e0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
2d7f0 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
2d800 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
2d810 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2d820 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2d830 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20  >p1>1 );.  pOut 
2d840 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2d850 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
2d860 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
2d870 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56  ll;.  if( db->nV
2d880 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56  dbeRead > db->nV
2d890 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20  Destroy+1 ){.   
2d8a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
2d8b0 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
2d8c0 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
2d8d0 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  rt;.    goto abo
2d8e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d8f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
2d900 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
2d910 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2d920 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2d930 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d  , iDb) );.    iM
2d940 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  oved = 0;  /* No
2d950 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2d960 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2d970 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2d980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
2d990 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
2d9a0 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
2d9b0 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
2d9c0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2d9d0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
2d9e0 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
2d9f0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2da00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2da10 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51  rror;.#ifndef SQ
2da20 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
2da30 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f  CUUM.    if( iMo
2da40 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
2da50 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2da60 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d  oved(db, iDb, iM
2da70 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
2da80 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f        /* All OP_
2da90 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
2daa0 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  ns occur on the 
2dab0 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20  same btree */.  
2dac0 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65      assert( rese
2dad0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
2dae0 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61  0 || resetSchema
2daf0 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29  OnFault==iDb+1 )
2db00 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
2db10 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62  emaOnFault = iDb
2db20 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  +1;.    }.#endif
2db30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2db40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61  ./* Opcode: Clea
2db50 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  r P1 P2 P3.**.**
2db60 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2db70 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
2db80 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
2db90 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
2dba0 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61  age.** in the da
2dbb0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67  tabase file is g
2dbc0 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74  iven by P1.  But
2dbd0 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79  , unlike Destroy
2dbe0 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f  , do not.** remo
2dbf0 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ve the table or 
2dc00 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64  index from the d
2dc10 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2dc20 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
2dc30 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20  ing clear is in 
2dc40 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2dc50 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e  e file if P2==0.
2dc60 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68    If.** P2==1 th
2dc70 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
2dc80 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
2dc90 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
2dca0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
2dcb0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
2dcc0 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
2dcd0 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
2dce0 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
2dcf0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20  **.** If the P3 
2dd00 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
2dd10 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  o, then the tabl
2dd20 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75  e referred to mu
2dd30 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b  st be an.** intk
2dd40 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c  ey table (an SQL
2dd50 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69   table, not an i
2dd60 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63  ndex). In this c
2dd70 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e  ase the row chan
2dd80 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20  ge .** count is 
2dd90 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2dda0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2ddb0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
2ddc0 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a  eing cleared. .*
2ddd0 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74  * If P3 is great
2dde0 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
2ddf0 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  en the value sto
2de00 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2de10 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e  P3 is.** also in
2de20 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2de30 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2de40 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2de50 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a  ng cleared..**.*
2de60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
2de70 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
2de80 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43  lear: {.  int nC
2de90 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e  hange;. .  nChan
2dea0 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
2deb0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2dec0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2ded0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2dee0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20  eMask, pOp->p2) 
2def0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2df00 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2df10 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  (.      db->aDb[
2df20 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f  pOp->p2].pBt, pO
2df30 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20  p->p1, (pOp->p3 
2df40 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a  ? &nChange : 0).
2df50 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e    );.  if( pOp->
2df60 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  p3 ){.    p->nCh
2df70 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  ange += nChange;
2df80 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
2df90 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  >0 ){.      asse
2dfa0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
2dfb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
2dfc0 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
2dfd0 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
2dfe0 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
2dff0 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d     aMem[pOp->p3]
2e000 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  .u.i += nChange;
2e010 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2e020 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2e030 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2e040 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e050 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65  code: ResetSorte
2e060 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  r P1 * * * *.**.
2e070 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
2e080 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  ntents from the 
2e090 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
2e0a0 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61  or sorter.** tha
2e0b0 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72  t is open on cur
2e0c0 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P1..**.** Th
2e0d0 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77  is opcode only w
2e0e0 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73  orks for cursors
2e0f0 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e   used for sortin
2e100 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20  g and.** opened 
2e110 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65  with OP_OpenEphe
2e120 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74  meral or OP_Sort
2e130 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20  erOpen..*/.case 
2e140 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20  OP_ResetSorter: 
2e150 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2e160 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20  pC;. .  assert( 
2e170 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2e180 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2e190 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2e1a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2e1b0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2e1c0 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28  .  if( isSorter(
2e1d0 70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pC) ){.    sqlit
2e1e0 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65  e3VdbeSorterRese
2e1f0 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f  t(db, pC->uc.pSo
2e200 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rter);.  }else{.
2e210 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2e220 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2e230 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61  E_BTREE );.    a
2e240 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
2e250 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
2e260 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2e270 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
2e280 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  r(pC->uc.pCursor
2e290 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2e2a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2e2b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
2e2c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2e2d0 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
2e2e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2e2f0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2e300 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
2e310 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
2e320 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
2e330 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2e340 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
2e350 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
2e360 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2e370 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
2e380 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2e390 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
2e3a0 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
2e3b0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
2e3c0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
2e3d0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
2e3e0 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
2e3f0 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
2e400 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
2e410 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
2e420 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
2e430 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
2e440 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
2e450 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
2e460 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
2e470 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
2e480 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
2e490 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2e4a0 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
2e4b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2e4c0 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
2e4d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e4e0 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
2e4f0 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
2e500 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
2e510 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2e520 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
2e530 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
2e540 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2e550 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
2e560 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
2e570 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
2e580 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
2e590 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2e5a0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
2e5b0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2e5c0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
2e5d0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
2e5e0 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
2e5f0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2e600 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
2e610 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
2e620 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
2e630 2f 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20  /* out2 */.case 
2e640 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
2e650 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
2e660 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  t2 */.  int pgno
2e670 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
2e680 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75   Db *pDb;..  pOu
2e690 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2e6a0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67  se(p, pOp);.  pg
2e6b0 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
2e6c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2e6d0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2e6e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2e6f0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2e700 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
2e710 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
2e720 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2e730 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
2e740 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2e750 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
2e760 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2e770 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
2e780 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
2e790 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
2e7a0 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
2e7b0 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
2e7c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c  .  }else{.    fl
2e7d0 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42  ags = BTREE_BLOB
2e7e0 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  KEY;.  }.  rc = 
2e7f0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
2e800 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
2e810 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
2e820 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2e830 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e840 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ror;.  pOut->u.i
2e850 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b   = pgno;.  break
2e860 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2e870 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50 34  SqlExec * * * P4
2e880 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65   *.**.** Run the
2e890 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f   SQL statement o
2e8a0 72 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  r statements spe
2e8b0 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 50 34  cified in the P4
2e8c0 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65   string..*/.case
2e8d0 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20   OP_SqlExec: {. 
2e8e0 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b   db->nSqlExec++;
2e8f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
2e900 65 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34  exec(db, pOp->p4
2e910 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  .z, 0, 0, 0);.  
2e920 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a  db->nSqlExec--;.
2e930 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2e940 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2e950 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2e960 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
2e970 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
2e980 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
2e990 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
2e9a0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
2e9b0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
2e9c0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
2e9d0 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
2e9e0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
2e9f0 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
2ea00 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
2ea10 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
2ea20 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
2ea30 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
2ea40 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
2ea50 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
2ea60 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
2ea70 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
2ea80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
2ea90 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
2eaa0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
2eab0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
2eac0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
2ead0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
2eae0 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
2eaf0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
2eb00 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
2eb10 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
2eb20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
2eb30 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
2eb40 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
2eb50 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
2eb60 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
2eb70 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
2eb80 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
2eb90 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
2eba0 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
2ebb0 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
2ebc0 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
2ebd0 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
2ebe0 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
2ebf0 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
2ec00 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
2ec10 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
2ec20 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
2ec30 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2ec40 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
2ec50 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
2ec60 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
2ec70 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
2ec80 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
2ec90 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
2eca0 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20  = MASTER_NAME;. 
2ecb0 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
2ecc0 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
2ecd0 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
2ece0 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
2ecf0 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
2ed00 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
2ed10 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
2ed20 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
2ed30 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
2ed40 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
2ed50 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
2ed60 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
2ed70 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
2ed80 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73  ].zDbSName, zMas
2ed90 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
2eda0 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
2edb0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2edc0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
2edd0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2ede0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
2edf0 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
2ee00 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2ee10 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
2ee20 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
2ee30 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
2ee40 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
2ee50 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
2ee60 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2ee70 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
2ee80 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
2ee90 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
2eea0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2eeb0 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
2eec0 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
2eed0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e    sqlite3DbFreeN
2eee0 4e 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  N(db, zSql);.   
2eef0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
2ef00 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
2ef10 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2ef20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
2ef30 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
2ef40 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  on(db);.    if( 
2ef50 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
2ef60 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
2ef70 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
2ef80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2ef90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
2efa0 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
2efb0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2efc0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
2efd0 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
2efe0 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
2eff0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
2f000 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
2f010 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
2f020 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
2f030 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
2f040 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
2f050 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
2f060 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
2f070 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
2f080 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
2f090 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
2f0a0 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
2f0b0 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
2f0c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
2f0d0 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
2f0e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2f0f0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2f100 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
2f110 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2f120 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
2f130 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2f140 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2f150 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  r;.  break;  .}.
2f160 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
2f170 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2f180 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
2f190 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
2f1a0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2f1b0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2f1c0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2f1d0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2f1e0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2f1f0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
2f200 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2f210 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2f220 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2f230 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
2f240 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2f250 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2f260 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2f270 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2f280 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2f290 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2f2a0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2f2b0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2f2c0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2f2d0 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a  se OP_DropTable:
2f2e0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2f2f0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
2f300 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2f310 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2f320 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2f330 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
2f340 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2f350 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2f360 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2f370 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2f380 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2f390 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
2f3a0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2f3b0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2f3c0 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
2f3d0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2f3e0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2f3f0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2f400 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
2f410 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
2f420 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2f430 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2f440 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2f450 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2f460 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2f470 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
2f480 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2f490 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
2f4a0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2f4b0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2f4c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
2f4d0 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
2f4e0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2f4f0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2f500 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2f510 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2f520 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
2f530 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
2f540 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2f550 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2f560 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
2f570 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2f580 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2f590 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2f5a0 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2f5b0 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2f5c0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2f5d0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2f5e0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2f5f0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2f600 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2f610 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
2f620 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2f630 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
2f640 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2f650 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2f660 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
2f670 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2f680 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
2f690 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
2f6a0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2f6b0 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79  *.** Do an analy
2f6c0 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  sis of the curre
2f6d0 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61  ntly open databa
2f6e0 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a  se.  Store in.**
2f6f0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65   register P1 the
2f700 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f   text of an erro
2f710 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69  r message descri
2f720 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d  bing any problem
2f730 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62  s..** If no prob
2f740 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20  lems are found, 
2f750 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20  store a NULL in 
2f760 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2f770 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
2f780 50 33 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  P3 contains one 
2f790 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 61  less than the ma
2f7a0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2f7b0 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
2f7c0 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
2f7d0 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
2f7e0 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
2f7f0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2f800 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
2f810 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
2f820 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
2f830 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
2f840 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
2f850 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
2f860 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2f870 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
2f880 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
2f890 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
2f8a0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
2f8b0 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f   integers.** sto
2f8c0 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52  red in P4_INTARR
2f8d0 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  AY argument..**.
2f8e0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
2f8f0 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
2f900 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
2f910 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2f920 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
2f930 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2f940 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
2f950 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
2f960 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
2f970 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
2f980 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
2f990 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
2f9a0 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
2f9b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2f9c0 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
2f9d0 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
2f9e0 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
2f9f0 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
2fa00 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
2fa10 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
2fa20 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
2fa30 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
2fa40 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
2fa50 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
2fa60 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
2fa70 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
2fa80 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
2fa90 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
2faa0 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
2fab0 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
2fac0 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
2fad0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
2fae0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2faf0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
2fb00 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
2fb10 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34   aRoot = pOp->p4
2fb20 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  .ai;.  assert( n
2fb30 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65  Root>0 );.  asse
2fb40 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f 6f 74 5d  rt( aRoot[nRoot]
2fb50 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2fb60 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2fb70 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
2fb80 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
2fb90 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
2fba0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2fbb0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2fbc0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2fbd0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2fbe0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2fbf0 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
2fc00 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
2fc10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2fc20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
2fc30 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
2fc40 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2fc50 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2fc60 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
2fc70 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
2fc80 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
2fc90 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
2fca0 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
2fcb0 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcd0 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
2fce0 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a  >u.i+1, &nErr);.
2fcf0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2fd00 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
2fd10 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
2fd20 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
2fd30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
2fd40 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
2fd50 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
2fd60 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69  {.    pnErr->u.i
2fd70 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20   -= nErr-1;.    
2fd80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2fd90 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
2fda0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
2fdb0 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
2fdc0 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
2fdd0 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
2fde0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2fdf0 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
2fe00 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2fe10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2fe20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
2fe30 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
2fe40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2fe50 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
2fe60 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2fe70 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
2fe80 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
2fe90 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
2fea0 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
2feb0 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74  P2 into a RowSet
2fec0 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20   object.** held 
2fed0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
2fee0 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
2fef0 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
2ff00 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
2ff10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2ff20 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
2ff30 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
2ff40 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2ff50 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
2ff60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2ff70 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
2ff80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2ff90 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
2ffa0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2ffb0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
2ffc0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2ffd0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
2ffe0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
2fff0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
30000 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
30010 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
30020 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
30030 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
30040 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
30050 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
30060 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
30070 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
30080 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
30090 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
300a0 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
300b0 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
300c0 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  m the RowSet obj
300d0 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  ect in P1.** and
300e0 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
300f0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
30100 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53  ..** Or, if RowS
30110 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20  et object P1 is 
30120 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
30130 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
30140 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
30150 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
30160 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
30170 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
30180 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
30190 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
301a0 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  l;..  pIn1 = &aM
301b0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
301c0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
301d0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
301e0 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
301f0 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e  owSetNext(pIn1->
30200 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
30210 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
30220 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
30230 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
30240 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
30250 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
30260 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
30270 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74  en(1,2);.    got
30280 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
30290 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
302a0 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
302b0 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
302c0 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
302d0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56  e index */.    V
302e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
302f0 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ,2);.    sqlite3
30300 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
30310 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
30320 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  val);.  }.  goto
30330 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
30340 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
30350 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
30360 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
30370 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
30380 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67   in rowset(P1) g
30390 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
303a0 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
303b0 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
303c0 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
303d0 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
303e0 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
303f0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
30400 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
30410 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
30420 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
30430 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
30440 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
30450 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
30460 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
30470 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
30480 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
30490 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
304a0 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
304b0 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
304c0 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
304d0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
304e0 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67  re sets of integ
304f0 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72  ers.** are inser
30500 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20  ted in distinct 
30510 70 68 61 73 65 73 2c 20 77 68 69 63 68 20 65 61  phases, which ea
30520 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
30530 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a  no duplicates..*
30540 2a 20 45 61 63 68 20 73 65 74 20 69 73 20 69 64  * Each set is id
30550 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
30560 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
30570 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
30580 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
30590 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d   the final set m
305a0 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c  ust have P4==-1,
305b0 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68   and for all oth
305c0 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20  er sets.** must 
305d0 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a  have P4>0..**.**
305e0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
305f0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
30600 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
30610 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
30620 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65  est.** the RowSe
30630 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
30640 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
30650 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
30660 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
30670 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
30680 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
30690 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
306a0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
306b0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
306c0 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
306d0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
306e0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
306f0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
30700 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
30710 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
30720 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
30730 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
30740 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
30750 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
30760 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
30770 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
30780 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
30790 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
307a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
307b0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
307d0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
307e0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
307f0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
30800 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
30810 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
30820 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
30830 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
30840 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
30850 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
30860 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
30870 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
30880 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
30890 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
308a0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
308b0 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
308c0 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
308d0 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
308e0 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
308f0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
30900 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
30910 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
30920 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
30930 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
30940 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
30950 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
30960 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
30970 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
30980 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
30990 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
309a0 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
309b0 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
309c0 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
309d0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
309e0 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
309f0 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e  et, iSet, pIn3->
30a00 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72  u.i);.    VdbeBr
30a10 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73  anchTaken(exists
30a20 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
30a30 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  exists ) goto ju
30a40 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
30a50 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20  if( iSet>=0 ){. 
30a60 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74     sqlite3RowSet
30a70 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
30a80 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  RowSet, pIn3->u.
30a90 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
30aa0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
30ab0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
30ac0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
30ad0 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
30ae0 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
30af0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
30b00 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
30b10 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
30b20 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
30b30 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
30b40 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
30b50 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
30b60 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
30b70 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
30b80 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
30b90 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
30ba0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
30bb0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
30bc0 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
30bd0 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
30be0 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
30bf0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
30c00 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
30c10 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
30c20 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
30c30 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
30c40 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
30c50 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
30c60 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
30c70 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
30c80 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
30c90 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
30ca0 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
30cb0 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
30cc0 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
30cd0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
30ce0 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
30cf0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
30d00 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
30d10 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
30d20 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63  n-zero, then rec
30d30 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69  ursive program i
30d40 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61  nvocation is ena
30d50 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  bled..*/.case OP
30d60 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
30d70 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
30d80 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
30d90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
30da0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
30db0 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
30dc0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
30dd0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
30de0 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
30df0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
30e00 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
30e10 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
30e20 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
30e30 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
30e40 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
30e50 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
30e60 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
30e70 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
30e80 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
30e90 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
30ea0 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
30eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
30ec0 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
30ed0 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
30ee0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
30ef0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
30f00 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
30f10 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
30f20 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
30f30 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
30f40 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
30f50 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
30f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30f70 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
30f80 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
30f90 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
30fa0 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
30fb0 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
30fc0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
30fd0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
30fe0 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
30ff0 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
31000 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
31010 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
31020 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
31030 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
31040 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
31050 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
31060 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
31070 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
31080 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
31090 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
310a0 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
310b0 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
310c0 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
310d0 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
310e0 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
310f0 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
31100 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
31110 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
31120 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
31130 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
31140 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
31150 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
31160 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
31170 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
31180 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
31190 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
311a0 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
311b0 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
311c0 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
311d0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
311e0 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
311f0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
31200 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
31210 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
31220 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
31230 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
31240 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
31250 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
31260 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
31270 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
31280 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
31290 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
312a0 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
312b0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
312c0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
312d0 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
312e0 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
312f0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
31300 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
31310 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
31320 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
31330 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
31340 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
31350 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
31360 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
31370 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
31380 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  or(p, "too many 
31390 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
313a0 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
313b0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
313c0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
313d0 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
313e0 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
313f0 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
31400 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
31410 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
31420 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
31430 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
31440 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
31450 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
31460 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
31470 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
31480 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
31490 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
314a0 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
314b0 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
314c0 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
314d0 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
314e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
314f0 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
31500 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
31510 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
31520 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
31530 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
31540 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
31550 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
31560 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
31570 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
31580 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
31590 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
315a0 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
315b0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
315c0 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
315d0 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
315e0 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
315f0 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
31600 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
31610 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
31620 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
31630 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
31640 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
31650 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
31660 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  r;.    assert( n
31670 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  Mem>0 );.    if(
31680 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
31690 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20  =0 ) nMem++;.   
316a0 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
316b0 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
316c0 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
316d0 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
316e0 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
316f0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
31700 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
31710 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20  beCursor*).     
31720 20 20 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f           + (pPro
31730 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38  gram->nOp + 7)/8
31740 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
31750 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
31760 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
31770 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
31780 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
31790 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
317a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
317b0 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
317c0 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
317d0 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
317e0 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
317f0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
31800 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
31810 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
31820 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
31830 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
31840 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
31850 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69   pFrame->pc = (i
31860 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
31870 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
31880 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
31890 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
318a0 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
318b0 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
318c0 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
318d0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
318e0 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
318f0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
31900 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
31910 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
31920 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
31930 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
31940 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
31950 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
31960 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65  TATUS.    pFrame
31970 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e  ->anExec = p->an
31980 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  Exec;.#endif..  
31990 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
319a0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
319b0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
319c0 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
319d0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
319e0 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
319f0 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
31a00 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
31a10 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
31a20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
31a30 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
31a40 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
31a50 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
31a60 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
31a70 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
31a80 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
31a90 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20  >nChildMem .    
31aa0 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d      || (pProgram
31ab0 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72  ->nCsr==0 && pPr
31ac0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70  ogram->nMem+1==p
31ad0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
31ae0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
31af0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
31b00 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  =pFrame->nChildC
31b10 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sr );.    assert
31b20 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  ( (int)(pOp - aO
31b30 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29  p)==pFrame->pc )
31b40 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61  ;.  }..  p->nFra
31b50 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  me++;.  pFrame->
31b60 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72  pParent = p->pFr
31b70 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c  ame;.  pFrame->l
31b80 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
31b90 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61  astRowid;.  pFra
31ba0 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  me->nChange = p-
31bb0 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61  >nChange;.  pFra
31bc0 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20  me->nDbChange = 
31bd0 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a  p->db->nChange;.
31be0 20 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65    assert( pFrame
31bf0 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b  ->pAuxData==0 );
31c00 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  .  pFrame->pAuxD
31c10 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74  ata = p->pAuxDat
31c20 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61  a;.  p->pAuxData
31c30 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e   = 0;.  p->nChan
31c40 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72  ge = 0;.  p->pFr
31c50 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20  ame = pFrame;.  
31c60 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d  p->aMem = aMem =
31c70 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46   VdbeFrameMem(pF
31c80 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d  rame);.  p->nMem
31c90 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c   = pFrame->nChil
31ca0 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73  dMem;.  p->nCurs
31cb0 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65  or = (u16)pFrame
31cc0 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70  ->nChildCsr;.  p
31cd0 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43  ->apCsr = (VdbeC
31ce0 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70  ursor **)&aMem[p
31cf0 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d  ->nMem];.  pFram
31d00 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29  e->aOnce = (u8*)
31d10 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72  &p->apCsr[pProgr
31d20 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d  am->nCsr];.  mem
31d30 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63  set(pFrame->aOnc
31d40 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d  e, 0, (pProgram-
31d50 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20  >nOp + 7)/8);.  
31d60 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
31d70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
31d80 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
31d90 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53  m->nOp;.#ifdef S
31da0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
31db0 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
31dc0 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
31dd0 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
31de0 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b  p[-1];..  break;
31df0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
31e00 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
31e10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31e20 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
31e30 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
31e40 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
31e50 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
31e60 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
31e70 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
31e80 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
31e90 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
31ea0 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
31eb0 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
31ec0 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
31ed0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
31ee0 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
31ef0 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
31f00 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
31f10 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
31f20 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
31f30 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
31f40 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
31f50 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
31f60 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
31f70 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
31f80 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
31f90 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
31fa0 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
31fb0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
31fc0 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
31fd0 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
31fe0 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
31ff0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
32000 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
32010 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
32020 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
32030 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
32040 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
32050 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
32060 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
32070 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
32080 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
32090 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
320a0 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
320b0 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
320c0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
320d0 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
320e0 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
320f0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
32100 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
32110 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
32120 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32130 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
32140 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
32150 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
32160 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
32170 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
32180 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
32190 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
321a0 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
321b0 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
321c0 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
321d0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
321e0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
321f0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
32200 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
32210 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
32220 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
32230 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
32240 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
32250 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
32260 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
32270 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
32280 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
32290 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
322a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
322b0 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
322c0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
322d0 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
322e0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
322f0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
32300 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
32310 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
32320 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
32330 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
32340 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
32350 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
32360 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
32370 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
32380 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
32390 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
323a0 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
323b0 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
323c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
323d0 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
323e0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
323f0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
32400 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
32410 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
32420 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
32430 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
32440 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
32450 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
32460 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
32470 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
32480 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
32490 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
324a0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
324b0 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
324c0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
324d0 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
324e0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
324f0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
32500 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
32510 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
32520 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
32530 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
32540 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
32550 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
32560 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
32570 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
32580 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
32590 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
325a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
325b0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
325c0 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
325d0 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
325e0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
325f0 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
32600 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
32610 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
32620 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
32630 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
32640 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
32650 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
32660 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
32670 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
32680 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
32690 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
326a0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
326b0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
326c0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
326d0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
326e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
326f0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
32700 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
32710 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
32720 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32730 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
32740 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
32750 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
32760 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
32770 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
32780 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
32790 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
327a0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
327b0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
327c0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
327d0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
327e0 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
327f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
32800 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
32810 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
32820 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
32830 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
32840 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
32850 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
32860 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
32870 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
32880 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
32890 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
328a0 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
328b0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
328c0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
328d0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
328e0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
328f0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
32900 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
32910 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
32920 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
32930 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
32940 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
32950 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
32960 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
32970 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
32980 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
32990 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
329a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
329b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
329c0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
329d0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
329e0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
329f0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
32a00 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
32a10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
32a20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
32a30 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
32a40 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
32a50 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
32a60 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
32a70 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
32a80 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
32a90 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
32aa0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
32ab0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
32ac0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
32ad0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
32ae0 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d  P1]>0 then r[P1]
32af0 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
32b00 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
32b10 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
32b20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
32b30 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
32b40 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
32b50 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63  greater, subtrac
32b60 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  t P3 from the.**
32b70 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64   value in P1 and
32b80 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
32b90 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
32ba0 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
32bb0 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
32bc0 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
32bd0 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
32be0 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
32bf0 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
32c00 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
32c10 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
32c20 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
32c30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
32c40 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
32c50 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32c60 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
32c70 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
32c80 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
32c90 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
32ca0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
32cb0 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31  .i>0 ){.    pIn1
32cc0 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
32cd0 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
32ce0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
32cf0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
32d00 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31  : OffsetLimit P1
32d10 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
32d20 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
32d30 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b  >0 then r[P2]=r[
32d40 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29  P1]+max(0,r[P3])
32d50 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29   else r[P2]=(-1)
32d60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
32d70 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f  de performs a co
32d80 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70  mmonly used comp
32d90 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  utation associat
32da0 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54  ed with.** LIMIT
32db0 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63   and OFFSET proc
32dc0 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64  ess.  r[P1] hold
32dd0 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e  s the limit coun
32de0 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68  ter.  r[P3].** h
32df0 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20  olds the offset 
32e00 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70  counter.  The op
32e10 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68  code computes th
32e20 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65  e combined value
32e30 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  .** of the LIMIT
32e40 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20   and OFFSET and 
32e50 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75  stores that valu
32e60 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65  e in r[P2].  The
32e70 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20   r[P2].** value 
32e80 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20  computed is the 
32e90 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
32ea0 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e  rows that will n
32eb0 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73  eed to be.** vis
32ec0 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ited in order to
32ed0 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75   complete the qu
32ee0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b  ery..**.** If r[
32ef0 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P3] is zero or n
32f00 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
32f10 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
32f20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b  OFFSET.** and r[
32f30 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65  P2] is set to be
32f40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
32f50 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a  e LIMIT, r[P1]..
32f60 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69  **.** if r[P1] i
32f70 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
32f80 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
32f90 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
32fa0 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
32fb0 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a   set to -1. .**.
32fc0 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b  ** Otherwise, r[
32fd0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68  P2] is set to th
32fe0 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61  e sum of r[P1] a
32ff0 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73  nd r[P3]..*/.cas
33000 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74  e OP_OffsetLimit
33010 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f  : {    /* in1, o
33020 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36  ut2, in3 */.  i6
33030 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  4 x;.  pIn1 = &a
33040 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33050 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
33060 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
33070 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
33080 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
33090 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
330a0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
330b0 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
330c0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
330d0 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  x = pIn1->u.i;. 
330e0 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c   if( x<=0 || sql
330f0 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c  ite3AddInt64(&x,
33100 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e   pIn3->u.i>0?pIn
33110 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20  3->u.i:0) ){.   
33120 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54   /* If the LIMIT
33130 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
33140 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
33150 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
33160 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f  his.    ** is do
33170 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61  cumented.  But a
33180 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49  lso, if the LIMI
33190 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73  T+OFFSET exceeds
331a0 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a   2^63 then.    *
331b0 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65  * also loop fore
331c0 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e  ver.  This is un
331d0 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20  documented.  In 
331e0 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20  fact, one could 
331f0 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61  argue.    ** tha
33200 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c  t the loop shoul
33210 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  d terminate.  Bu
33220 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c  t assuming 1 bil
33230 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a  lion iterations.
33240 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e      ** per secon
33250 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67  d (far exceeding
33260 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
33270 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74  s of any current
33280 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a   hardware).    *
33290 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20  * it would take 
332a0 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73  nearly 300 years
332b0 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61   to actually rea
332c0 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53  ch the limit.  S
332d0 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67  o.    ** looping
332e0 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65   forever is a re
332f0 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69  asonable approxi
33300 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70  mation. */.    p
33310 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20  Out->u.i = -1;. 
33320 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
33330 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20  ->u.i = x;.  }. 
33340 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
33350 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
33360 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
33370 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
33380 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
33390 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  -, goto P2.**.**
333a0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
333b0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
333c0 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
333d0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
333e0 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
333f0 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61  ally greater tha
33400 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63  n zero, then dec
33410 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
33420 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
33430 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e  .** If it is non
33440 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20  -zero (negative 
33450 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64  or positive) and
33460 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20   then also jump 
33470 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72  to P2.  .** If r
33480 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
33490 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
334a0 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
334b0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
334c0 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
334d0 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
334e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
334f0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
33500 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
33510 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
33520 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
33530 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
33540 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
33550 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
33560 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d  {.     if( pIn1-
33570 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75  >u.i>0 ) pIn1->u
33580 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20  .i--;.     goto 
33590 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
335a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
335b0 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
335c0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
335d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
335e0 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
335f0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
33600 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
33610 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
33620 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
33630 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a  e in P1.** and j
33640 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
33650 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
33660 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
33670 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
33680 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
33690 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
336a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
336b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
336c0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
336d0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
336e0 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
336f0 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69  NT64 ) pIn1->u.i
33700 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
33710 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
33720 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
33730 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
33740 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
33750 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
33760 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a  code: AggStep0 *
33770 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
33780 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
33790 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
337a0 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
337b0 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
337c0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
337d0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
337e0 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
337f0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
33800 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
33810 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
33820 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
33830 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
33840 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
33850 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
33860 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
33870 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
33880 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
33890 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
338a0 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
338b0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
338c0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
338d0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
338e0 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
338f0 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
33900 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
33910 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
33920 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
33930 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
33940 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
33950 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
33960 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
33970 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62  e3_context.** ob
33980 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65  ject that is use
33990 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e  d to run the fun
339a0 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
339b0 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65   P3 is.** as the
339c0 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
339d0 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
339e0 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
339f0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
33a00 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
33a10 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
33a20 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
33a30 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
33a40 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
33a50 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
33a60 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
33a70 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
33a80 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
33a90 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
33aa0 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
33ab0 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
33ac0 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
33ad0 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
33ae0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
33af0 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
33b00 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
33b10 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
33b20 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
33b30 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
33b40 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
33b50 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  ep0: {.  int n;.
33b60 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
33b70 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
33b80 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
33b90 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
33ba0 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
33bb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
33bc0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
33bd0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
33be0 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
33bf0 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
33c00 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
33c10 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
33c20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
33c30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
33c40 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
33c50 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
33c60 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
33c70 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
33c80 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
33c90 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
33ca0 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
33cb0 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
33cc0 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
33cd0 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65  mem;.  pCtx->pMe
33ce0 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  m = 0;.  pCtx->p
33cf0 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
33d00 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
33d10 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
33d20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
33d30 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
33d40 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
33d50 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
33d60 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
33d70 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
33d80 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
33d90 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46  _AggStep;.  /* F
33da0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
33db0 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d   OP_AggStep */.}
33dc0 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
33dd0 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
33de0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
33df0 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  pCtx;.  Mem *pMe
33e00 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61  m;.  Mem t;..  a
33e10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
33e20 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
33e30 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
33e40 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20  p4.pCtx;.  pMem 
33e50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
33e60 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
33e70 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
33e80 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
33e90 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
33ea0 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
33eb0 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
33ec0 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
33ed0 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
33ee0 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
33ef0 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
33f00 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
33f10 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
33f20 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
33f30 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
33f40 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
33f50 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
33f60 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
33f70 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
33f80 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  */.  if( pCtx->p
33f90 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20  Mem != pMem ){. 
33fa0 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20     pCtx->pMem = 
33fb0 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  pMem;.    for(i=
33fc0 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e  pCtx->argc-1; i>
33fd0 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61  =0; i--) pCtx->a
33fe0 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70  rgv[i] = &aMem[p
33ff0 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a  Op->p2+i];.  }..
34000 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
34010 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  BUG.  for(i=0; i
34020 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b  <pCtx->argc; i++
34030 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
34040 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e  emIsValid(pCtx->
34050 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20  argv[i]) );.    
34060 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
34070 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e  Op->p2+i, pCtx->
34080 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65  argv[i]);.  }.#e
34090 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  ndif..  pMem->n+
340a0 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  +;.  sqlite3Vdbe
340b0 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20  MemInit(&t, db, 
340c0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74  MEM_Null);.  pCt
340d0 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20  x->pOut = &t;.  
340e0 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
340f0 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73  x = 0;.  pCtx->s
34100 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28  kipFlag = 0;.  (
34110 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46  pCtx->pFunc->xSF
34120 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e  unc)(pCtx,pCtx->
34130 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29  argc,pCtx->argv)
34140 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
34150 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
34160 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
34170 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  ux ){.    if( pC
34180 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20  tx->isError ){. 
34190 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
341a0 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
341b0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
341c0 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63  t(&t));.      rc
341d0 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
341e0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
341f0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
34200 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28 20 72  e(&t);.    if( r
34210 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
34220 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
34230 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
34240 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ( t.flags==MEM_N
34250 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ull );.  }.  if(
34260 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
34270 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
34280 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
34290 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
342a0 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b   i = pOp[-1].p1;
342b0 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c  .    if( i ) sql
342c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
342d0 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
342e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
342f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
34300 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
34310 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
34320 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32  accum=r[P1] N=P2
34330 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
34340 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
34350 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
34360 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
34370 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
34380 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
34390 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
343a0 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
343b0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
343c0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
343d0 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
343e0 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
343f0 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
34400 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
34410 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
34420 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
34430 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
34440 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
34450 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
34460 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
34470 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
34480 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
34490 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
344a0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
344b0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
344c0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
344d0 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
344e0 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
344f0 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
34500 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
34510 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
34520 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
34530 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
34540 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
34550 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
34560 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
34570 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
34580 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  or) );.  pMem = 
34590 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
345a0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
345b0 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
345c0 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
345d0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
345e0 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
345f0 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
34600 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
34610 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
34620 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
34630 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
34640 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20  text(pMem));.   
34650 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
34660 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
34670 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
34680 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
34690 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
346a0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
346b0 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
346c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
346d0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
346e0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
346f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
34700 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34710 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
34720 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
34730 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
34740 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
34750 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
34760 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
34770 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
34780 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
34790 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
347a0 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
347b0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
347c0 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
347d0 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
347e0 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
347f0 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
34800 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
34810 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
34820 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
34830 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
34840 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
34850 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
34860 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
34870 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
34880 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
34890 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
348a0 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
348b0 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
348c0 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
348d0 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
348e0 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
348f0 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
34900 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
34910 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
34920 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
34930 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
34940 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
34950 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
34960 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
34980 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
34990 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
349a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349b0 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
349c0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
349d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349e0 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
349f0 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
34a00 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
34a10 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
34a20 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
34a30 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
34a40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
34a50 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
34a60 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
34a70 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
34a80 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
34a90 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
34aa0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
34ab0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
34ac0 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
34ad0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
34ae0 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
34af0 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
34b00 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
34b10 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
34b20 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
34b30 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
34b40 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
34b50 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
34b60 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
34b70 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
34b80 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
34b90 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
34ba0 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
34bb0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
34bc0 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
34bd0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
34be0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
34bf0 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
34c00 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
34c10 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
34c20 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
34c30 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
34c40 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
34c50 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
34c60 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
34c70 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
34c80 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
34c90 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
34ca0 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
34cb0 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
34cc0 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
34cd0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
34ce0 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
34cf0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
34d00 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
34d10 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
34d20 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
34d30 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
34d40 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
34d50 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
34d60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
34d70 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
34d80 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
34d90 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
34da0 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
34db0 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
34dc0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
34dd0 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
34de0 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
34df0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
34e00 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
34e10 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
34e20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e40 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
34e50 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
34e60 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
34e70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
34e80 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
34e90 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
34ea0 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
34eb0 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
34ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
34ed0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
34ee0 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
34f10 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
34f20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34f30 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
34f40 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
34f50 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
34f60 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
34f70 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
34f80 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
34f90 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
34fa0 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
34fb0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
34fc0 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
34fd0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
34fe0 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
34ff0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
35000 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
35010 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
35020 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
35030 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
35040 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
35050 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
35060 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
35070 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
35080 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
35090 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
350a0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
350b0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
350c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
350d0 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
350e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
350f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
35100 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
35110 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
35120 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
35130 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
35140 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
35150 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
35160 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
35170 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
35180 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
35190 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
351a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
351b0 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
351c0 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
351d0 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
351e0 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
351f0 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
35200 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
35210 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
35220 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
35230 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
35240 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
35250 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
35260 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
35270 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
35280 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
35290 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
352a0 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
352b0 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
352c0 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
352d0 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
352e0 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
352f0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
35300 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
35310 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
35320 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
35330 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
35340 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
35350 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
35360 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
35370 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
35380 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
35390 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
353a0 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
353b0 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
353c0 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
353d0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
353e0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
353f0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
35400 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
35410 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
35420 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
35430 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
35440 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
35450 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
35460 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63  (p,.          "c
35470 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
35480 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
35490 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
354a0 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
354b0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
354c0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
354d0 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
354e0 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
354f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
35500 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
35510 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
35520 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
35530 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
35540 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
35550 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
35560 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
35570 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
35580 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
35590 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
355a0 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
355b0 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
355c0 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
355d0 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
355e0 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
355f0 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
35600 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
35610 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
35620 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
35630 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
35640 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
35650 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
35660 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
35670 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29  eWal(pPager, db)
35680 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
35690 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
356a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
356b0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
356c0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
356d0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
356e0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c     }else if( eOl
356f0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
35700 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20  MODE_MEMORY ){. 
35710 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74         /* Cannot
35720 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65   transition dire
35730 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59  ctly from MEMORY
35740 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f   to WAL.  Use mo
35750 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a  de OFF.        *
35760 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64  * as an intermed
35770 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  iate */.        
35780 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
35790 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
357a0 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  r, PAGER_JOURNAL
357b0 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20  MODE_OFF);.     
357c0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f   }.  .      /* O
357d0 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  pen a transactio
357e0 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
357f0 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65  e file. Regardle
35800 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  ss of the journa
35810 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c  l.      ** mode,
35820 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
35830 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20  n always uses a 
35840 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
35850 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
35860 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
35870 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
35880 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  Bt)==0 );.      
35890 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
358a0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
358b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
358c0 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65  tVersion(pBt, (e
358d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
358e0 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a  ALMODE_WAL ? 2 :
358f0 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   1));.      }.  
35900 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
35910 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
35920 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69  OMIT_WAL */..  i
35930 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65  f( rc ) eNew = e
35940 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71  Old;.  eNew = sq
35950 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
35960 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
35970 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d   eNew);..  pOut-
35980 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
35990 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
359a0 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
359b0 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
359c0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
359d0 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
359e0 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
359f0 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
35a00 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
35a10 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
35a20 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
35a30 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
35a40 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ing);.  if( rc )
35a50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35a60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
35a70 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
35a80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
35a90 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
35aa0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
35ab0 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
35ac0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
35ad0 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
35ae0 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a  e: Vacuum P1 * *
35af0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
35b00 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
35b10 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73  abase P1.  P1 is
35b20 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61   0 for "main", a
35b30 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20  nd 2 or more.** 
35b40 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20  for an attached 
35b50 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22  database.  The "
35b60 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d  temp" database m
35b70 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d  ay not be vacuum
35b80 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
35b90 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
35ba0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
35bb0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
35bc0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
35bd0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f  >zErrMsg, db, pO
35be0 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
35bf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35c00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
35c10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
35c20 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
35c30 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
35c40 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
35c50 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
35c60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
35c70 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
35c80 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
35c90 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
35ca0 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
35cb0 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
35cc0 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
35cd0 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
35ce0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
35cf0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
35d00 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
35d10 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
35d20 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
35d30 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
35d40 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
35d50 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
35d60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
35d70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
35d80 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
35d90 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
35da0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
35db0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
35dc0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
35dd0 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
35de0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
35df0 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
35e00 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
35e10 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
35e20 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
35e30 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
35e40 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
35e50 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
35e60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35e70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
35e80 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
35e90 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
35ea0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
35eb0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
35ec0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
35ed0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
35ee0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
35ef0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65   statements to e
35f00 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20  xpire.  When an 
35f10 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
35f20 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64  t.** is executed
35f30 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73   using sqlite3_s
35f40 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69  tep() it will ei
35f50 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c  ther automatical
35f60 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20  ly.** reprepare 
35f70 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61  itself (if it wa
35f80 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65  s originally cre
35f90 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ated using sqlit
35fa0 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29  e3_prepare_v2())
35fb0 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66  .** or it will f
35fc0 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ail with SQLITE_
35fd0 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49  SCHEMA..** .** I
35fe0 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
35ff0 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
36000 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
36010 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
36020 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
36030 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
36040 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
36050 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e  ment is expired.
36060 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
36070 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
36080 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
36090 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
360a0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
360b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
360c0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
360d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
360e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
360f0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
36100 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
36110 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
36120 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
36130 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72  Db=P1 root=P2 wr
36140 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74  ite=P3.**.** Obt
36150 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
36160 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
36170 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
36180 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
36190 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
361a0 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
361b0 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
361c0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
361d0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
361e0 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
361f0 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
36200 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
36210 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
36220 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
36230 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
36240 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
36250 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
36260 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
36270 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
36280 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
36290 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
362a0 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
362b0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
362c0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
362d0 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
362e0 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
362f0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
36300 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
36310 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
36320 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
36330 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
36340 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
36350 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
36360 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73  Op->p3;.  if( is
36370 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d  WriteLock || 0==
36380 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
36390 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
363a0 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  d) ){.    int p1
363b0 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
363c0 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
363d0 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
363e0 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
363f0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
36400 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20  ask, p1) );.    
36410 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
36420 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
36430 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20  eLock==1 );.    
36440 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
36450 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
36460 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
36470 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
36480 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b  );.    if( rc ){
36490 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30  .      if( (rc&0
364a0 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  xFF)==SQLITE_LOC
364b0 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63  KED ){.        c
364c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
364d0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
364e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
364f0 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20  or(p, "database 
36500 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
36510 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20   %s", z);.      
36520 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  }.      goto abo
36530 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36540 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
36550 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
36560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
36570 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
36580 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
36590 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
365a0 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
365b0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
365c0 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
365d0 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
365e0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
365f0 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
36600 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
36610 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
36620 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
36630 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
36640 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
36650 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
36660 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
36670 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
36680 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
36690 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
366a0 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
366b0 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
366c0 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
366d0 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
366e0 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
366f0 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
36700 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
36710 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
36720 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
36730 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
36740 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
36750 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
36760 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36770 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
36780 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36790 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
367a0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
367b0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
367c0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
367d0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
367e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
367f0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
36800 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32  e: VCreate P1 P2
36810 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20   * * *.**.** P2 
36820 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
36830 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
36840 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
36850 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
36860 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68   .** P1. Call th
36870 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
36880 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
36890 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
368a0 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65  ate: {.  Mem sMe
368b0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
368c0 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
368d0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
368e0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ded */.  const c
368f0 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e  har *zTab;  /* N
36900 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
36910 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d  al table */..  m
36920 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
36930 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
36940 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20   sMem.db = db;. 
36950 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69   /* Because P2 i
36960 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69  s always a stati
36970 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  c string, it is 
36980 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  impossible for t
36990 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
369a0 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20  dbeMemCopy() to 
369b0 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74  fail */.  assert
369c0 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
369d0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  .flags & MEM_Str
369e0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
369f0 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
36a00 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61  .flags & MEM_Sta
36a10 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  tic)!=0 );.  rc 
36a20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
36a30 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65  Copy(&sMem, &aMe
36a40 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61  m[pOp->p2]);.  a
36a50 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
36a60 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d  E_OK );.  zTab =
36a70 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
36a80 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
36a90 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72  (&sMem);.  asser
36aa0 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d  t( zTab || db->m
36ab0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
36ac0 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20   if( zTab ){.   
36ad0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
36ae0 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
36af0 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26  pOp->p1, zTab, &
36b00 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
36b10 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
36b20 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
36b30 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36b40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36b50 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
36b60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
36b70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36b80 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
36b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36ba0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
36bb0 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
36bc0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
36bd0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
36be0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
36bf0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
36c00 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
36c10 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
36c20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
36c30 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
36c40 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72   {.  db->nVDestr
36c50 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c  oy++;.  rc = sql
36c60 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
36c70 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  roy(db, pOp->p1,
36c80 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64   pOp->p4.z);.  d
36c90 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a  b->nVDestroy--;.
36ca0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
36cb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
36cc0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
36cd0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
36ce0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36cf0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
36d00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36d10 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
36d20 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50  : VOpen P1 * * P
36d30 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
36d40 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
36d50 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
36d60 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
36d70 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
36d80 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
36d90 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  r number.  This 
36da0 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63  opcode opens a c
36db0 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72  ursor to the vir
36dc0 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e  tual.** table an
36dd0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75  d stores that cu
36de0 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63  rsor in P1..*/.c
36df0 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a  ase OP_VOpen: {.
36e00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
36e10 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
36e20 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72  ab_cursor *pVCur
36e30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
36e40 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
36e50 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
36e60 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  *pModule;..  ass
36e70 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
36e80 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b  r );.  pCur = 0;
36e90 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20  .  pVCur = 0;.  
36ea0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
36eb0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
36ec0 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
36ed0 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
36ee0 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
36ef0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
36f00 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ED;.    goto abo
36f10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36f20 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  .  }.  pModule =
36f30 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
36f40 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
36f50 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
36f60 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  VCur);.  sqlite3
36f70 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
36f80 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
36f90 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36fa0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36fb0 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
36fc0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
36fd0 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20  rsor base class 
36fe0 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61  */.  pVCur->pVta
36ff0 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a  b = pVtab;..  /*
37000 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65   Initialize vdbe
37010 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a   cursor object *
37020 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
37030 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
37040 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52  ->p1, 0, -1, CUR
37050 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66  TYPE_VTAB);.  if
37060 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43  ( pCur ){.    pC
37070 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70  ur->uc.pVCur = p
37080 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d  VCur;.    pVtab-
37090 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65  >nRef++;.  }else
370a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
370b0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
370c0 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  ;.    pModule->x
370d0 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20  Close(pVCur);.  
370e0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
370f0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
37100 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
37110 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
37120 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
37130 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37140 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
37150 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
37160 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
37170 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20  is: iplan=r[P3] 
37180 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zplan='P4'.**.**
37190 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
371a0 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
371b0 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
371c0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
371d0 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
371e0 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
371f0 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
37200 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
37210 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
37220 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
37230 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
37240 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
37250 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
37260 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
37270 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
37280 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
37290 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
372a0 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
372b0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
372c0 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
372d0 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
372e0 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
372f0 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
37300 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
37310 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
37320 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
37330 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
37340 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
37350 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
37360 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
37370 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
37380 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
37390 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
373a0 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
373b0 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
373c0 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
373d0 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
373e0 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
373f0 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
37400 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
37410 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
37420 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
37430 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
37440 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
37450 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
37460 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
37470 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
37480 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
37490 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
374a0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
374b0 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
374c0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
374d0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
374e0 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
374f0 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
37500 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
37510 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71  sor *pVCur;.  sq
37520 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
37530 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
37540 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
37550 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
37560 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
37570 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ery = &aMem[pOp-
37580 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20  >p3];.  pArgc = 
37590 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43  &pQuery[1];.  pC
375a0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
375b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
375c0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75  ( memIsValid(pQu
375d0 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ery) );.  REGIST
375e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
375f0 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73  , pQuery);.  ass
37600 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
37610 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
37620 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70  B );.  pVCur = p
37630 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20  Cur->uc.pVCur;. 
37640 20 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e   pVtab = pVCur->
37650 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
37660 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
37670 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
37680 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
37690 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
376a0 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
376b0 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
376c0 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
376d0 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
376e0 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
376f0 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
37700 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
37710 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
37720 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
37730 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
37740 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70  .  res = 0;.  ap
37750 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
37760 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e    for(i = 0; i<n
37770 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  Arg; i++){.    a
37780 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
37790 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20  [i+1];.  }.  rc 
377a0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74  = pModule->xFilt
377b0 65 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79  er(pVCur, iQuery
377c0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
377d0 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c  g, apArg);.  sql
377e0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
377f0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
37800 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37810 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37820 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64  or;.  res = pMod
37830 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29  ule->xEof(pVCur)
37840 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
37850 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61  w = 0;.  VdbeBra
37860 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
37870 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
37880 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
37890 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
378a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
378b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
378c0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
378d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
378e0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
378f0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
37900 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
37910 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
37920 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
37930 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
37940 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
37950 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
37960 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
37970 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
37980 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
37990 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
379a0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
379b0 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
379c0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
379d0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
379e0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
379f0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
37a00 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
37a10 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
37a20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
37a30 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
37a40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
37a50 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
37a60 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
37a70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
37a80 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
37a90 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
37aa0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
37ab0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
37ac0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
37ad0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
37ae0 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
37af0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
37b00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
37b10 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
37b20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
37b30 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75   pVtab = pCur->u
37b40 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
37b50 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
37b60 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
37b70 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
37b80 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
37b90 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
37ba0 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
37bb0 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
37bc0 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
37bd0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
37be0 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
37bf0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
37c00 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63  xColumn(pCur->uc
37c10 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78  .pVCur, &sContex
37c20 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73  t, pOp->p2);.  s
37c30 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
37c40 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
37c50 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74  ;.  if( sContext
37c60 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
37c70 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73  rc = sContext.is
37c80 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  Error;.  }.  sql
37c90 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
37ca0 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e  coding(pDest, en
37cb0 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
37cc0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
37cd0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
37ce0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
37cf0 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
37d00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
37d10 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
37d20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
37d30 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
37d40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37d50 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
37d60 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
37d70 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37d80 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
37d90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
37da0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
37db0 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20  pcode: VNext P1 
37dc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
37dd0 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74  dvance virtual t
37de0 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e  able P1 to the n
37df0 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72  ext row in its r
37e00 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a  esult set and.**
37e10 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
37e20 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66  tion P2.  Or, if
37e30 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
37e40 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a  le has reached.*
37e50 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73  * the end of its
37e60 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65   result set, the
37e70 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  n fall through t
37e80 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
37e90 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
37ea0 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a  OP_VNext: {   /*
37eb0 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74   jump */.  sqlit
37ec0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
37ed0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
37ee0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
37ef0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64  .  int res;.  Vd
37f00 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
37f10 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43  .  res = 0;.  pC
37f20 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
37f30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
37f40 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
37f50 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
37f60 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
37f70 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65  llRow ){.    bre
37f80 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
37f90 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  = pCur->uc.pVCur
37fa0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
37fb0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
37fc0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
37fd0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
37fe0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
37ff0 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
38000 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
38010 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
38020 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
38030 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
38040 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
38050 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
38060 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
38070 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
38080 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
38090 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
380a0 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
380b0 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
380c0 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
380d0 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
380e0 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
380f0 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
38100 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
38110 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
38120 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
38130 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
38140 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
38150 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
38160 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70 56  Next(pCur->uc.pV
38170 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Cur);.  sqlite3V
38180 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
38190 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
381a0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
381b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
381c0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
381d0 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56  xEof(pCur->uc.pV
381e0 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  Cur);.  VdbeBran
381f0 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b  chTaken(!res,2);
38200 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20  .  if( !res ){. 
38210 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
38220 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20  s data, jump to 
38230 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a  P2 */.    goto j
38240 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
38250 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
38260 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  t;.  }.  goto ch
38270 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
38280 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  t;.}.#endif /* S
38290 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
382a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
382b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
382c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALT