/ Hex Artifact Content
Login

Artifact accf86634537d2d1ef72cac8b9b5281943f2711853659e479e3d10addd2550f3:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2500: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
2510: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
2520: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2530: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
2540: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
2550: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
2560: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
2570: 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  e) ){.    p->apC
2580: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
2590: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
25a0: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
25b0: 74 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74  t(pCx, 0, offset
25c0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41  of(VdbeCursor,pA
25d0: 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20  ltCursor));.    
25e0: 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20  pCx->eCurType = 
25f0: 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43  eCurType;.    pC
2600: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
2610: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
2620: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d  nField;.    pCx-
2630: 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d  >aOffset = &pCx-
2640: 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  >aType[nField];.
2650: 20 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65      if( eCurType
2660: 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2670: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63  ){.      pCx->uc
2680: 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  .pCursor = (BtCu
2690: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
26a0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
26b0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
26c0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
26d0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
26e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
26f0: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63  rsorZero(pCx->uc
2700: 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
2710: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43  .  }.  return pC
2720: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  x;.}../*.** Try 
2730: 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c  to convert a val
2740: 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ue into a numeri
2750: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2760: 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f   if we can.** do
2770: 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73   so without loss
2780: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   of information.
2790: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
27a0: 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a  , if the string.
27b0: 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  ** looks like a 
27c0: 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20  number, convert 
27d0: 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72  it into a number
27e0: 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27f0: 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61  t.** look like a
2800: 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69   number, leave i
2810: 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  t alone..**.** I
2820: 66 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74  f the bTryForInt
2830: 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74   flag is true, t
2840: 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74  hen extra effort
2850: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65   is made to give
2860: 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72  .** an integer r
2870: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2880: 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f  Strings that loo
2890: 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20  k like floating 
28a0: 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20  point.** values 
28b0: 62 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e  but which have n
28c0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d  o fractional com
28d0: 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a  ponent (example:
28e0: 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c   '48.00').** wil
28f0: 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74  l have a MEM_Int
2900: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2910: 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20  when bTryForInt 
2920: 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49  is true..**.** I
2930: 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  f bTryForInt is 
2940: 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74  false, then if t
2950: 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  he input string 
2960: 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d  contains a decim
2970: 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65  al.** point or e
2980: 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74  xponential notat
2990: 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ion, the result 
29a0: 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c  is only MEM_Real
29b0: 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65  , even.** if the
29c0: 72 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69  re is an exact i
29d0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
29e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61  ation of the qua
29f0: 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ntity..*/.static
2a00: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
2a10: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
2a20: 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f  pRec, int bTryFo
2a30: 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20  rInt){.  double 
2a40: 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56  rValue;.  i64 iV
2a50: 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d  alue;.  u8 enc =
2a60: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73   pRec->enc;.  as
2a70: 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61  sert( (pRec->fla
2a80: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2a90: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
2aa0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69  ==MEM_Str );.  i
2ab0: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2ac0: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2ad0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
2ae0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
2af0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2b00: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2b10: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
2b20: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2b30: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2b40: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2b50: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2b60: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72  e{.    pRec->u.r
2b70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70   = rValue;.    p
2b80: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
2b90: 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20  M_Real;.    if( 
2ba0: 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c  bTryForInt ) sql
2bb0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2bc0: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2bd0: 20 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55   }.  /* TEXT->NU
2be0: 4d 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f  MERIC is many->o
2bf0: 6e 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69  ne.  Hence, it i
2c00: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69  s important to i
2c10: 6e 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20  nvalidate the.  
2c20: 2a 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ** string repres
2c30: 65 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63  entation after c
2c40: 6f 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72  omputing a numer
2c50: 69 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62  ic equivalent, b
2c60: 65 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20  ecause the.  ** 
2c70: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2c80: 61 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20  ation might not 
2c90: 62 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c  be the canonical
2ca0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2cb0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d  for the.  ** num
2cc0: 65 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63  eric value.  Tic
2cd0: 6b 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64  ket [343634942dd
2ce0: 35 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31  54ab57b7024] 201
2cf0: 38 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52  8-01-31. */.  pR
2d00: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ec->flags &= ~ME
2d10: 4d 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  M_Str;.}../*.** 
2d20: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2d30: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2d40: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2d50: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
2d60: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
2d70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
2d80: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2d90: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
2da0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
2db0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
2dc0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2dd0: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
2de0: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
2df0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2e00: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2e10: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2e20: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2e30: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2e40: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2e50: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
2e60: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
2e70: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
2e80: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
2e90: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
2ea0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2eb0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
2ec0: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
2ed0: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
2ee0: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
2ef0: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2f00: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2f10: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2f20: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a  QLITE_AFF_BLOB:.
2f30: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2f40: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2f50: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2f60: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
2f70: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
2f80: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
2f90: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
2fa0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
2fb0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
2fc0: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
2fd0: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
2fe0: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
2ff0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
3000: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
3010: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
3020: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
3030: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
3040: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
3050: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
3060: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
3070: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
3080: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
3090: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
30a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
30b0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
30c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30d0: 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  t)==0 ){ /*OPTIM
30e0: 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
30f0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52  */.      if( (pR
3100: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3110: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
3120: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
3130: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20  ags & MEM_Str ) 
3140: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3150: 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20  nity(pRec,1);.  
3160: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3170: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
3180: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
3190: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
31a0: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61   }.  }else if( a
31b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31c0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
31d0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
31e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
31f0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
3200: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
3210: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
3220: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
3230: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
3240: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
3250: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
3260: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
3270: 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20  tion.  It would 
3280: 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72  be harmless to r
3290: 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72  epeat the conver
32a0: 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20  sion if .    ** 
32b0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
32c0: 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62   a string rep, b
32d0: 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65  ut it is pointle
32e0: 73 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73  ss to waste thos
32f0: 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63  e.    ** CPU cyc
3300: 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  les. */.    if( 
3310: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
3320: 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50  MEM_Str) ){ /*OP
3330: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
3340: 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  LSE*/.      if( 
3350: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
3360: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
3370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
3380: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
3390: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31  ify(pRec, enc, 1
33a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33b0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
33c0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
33d0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a  EM_Int);.  }.}..
33e0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
33f0: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3400: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3410: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3420: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3430: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3440: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3450: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3460: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3470: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3480: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3490: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
34a0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
34b0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
34c0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
34d0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
34e0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
34f0: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3500: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3510: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3530: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3540: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3550: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3560: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3570: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3580: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3590: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
35a0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
35b0: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
35c0: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
35d0: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
35e0: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
35f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3600: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3610: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3620: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3630: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3640: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3650: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3660: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3670: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3680: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3690: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
36a0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
36b0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
36c0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
36d0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
36e0: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
36f0: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3700: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3710: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3720: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3730: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3740: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3750: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3760: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3770: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3780: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3790: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
37a0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
37b0: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
37c0: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
37d0: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
37e0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
37f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3800: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65  m *pMem){.  asse
3810: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
3820: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3830: 52 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61  Real))==0 );.  a
3840: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
3850: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3860: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a  EM_Blob))!=0 );.
3870: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3880: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
3890: 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.r, pMem->n, 
38a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
38b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
38c0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
38d0: 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20  Atoi64(pMem->z, 
38e0: 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d  &pMem->u.i, pMem
38f0: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3900: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3910: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
3920: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
3930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3940: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
3950: 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68  e for pMem, eith
3960: 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45  er MEM_Int or ME
3970: 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f  M_Real or both o
3980: 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a  r.** none.  .**.
3990: 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e  ** Unlike applyN
39a0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29  umericAffinity()
39b0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64  , this routine d
39c0: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70  oes not modify p
39d0: 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42  Mem->flags..** B
39e0: 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70  ut it does set p
39f0: 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65  Mem->u.r and pMe
3a00: 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61  m->u.i appropria
3a10: 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tely..*/.static 
3a20: 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28  u16 numericType(
3a30: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66  Mem *pMem){.  if
3a40: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3a50: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3a60: 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  l) ){.    return
3a70: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3a80: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3a90: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
3aa0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3ab0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
3ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70  .    return comp
3ad0: 75 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70  uteNumericType(p
3ae0: 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Mem);.  }.  retu
3af0: 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  rn 0;.}..#ifdef 
3b00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3b10: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
3b20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
3b30: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
3b40: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
3b50: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
3b60: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
3b70: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
3b80: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3b90: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
3ba0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
3bb0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
3bc0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
3bd0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
3be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
3bf0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
3c00: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
3c10: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
3c20: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
3c30: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
3c40: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
3c50: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
3c60: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3c70: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
3c80: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3c90: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3ca0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3cb0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3cc0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3cd0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3ce0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3cf0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3d00: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3d10: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3d20: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3d30: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3d40: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3d50: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3d60: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3d70: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
3d80: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
3d90: 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69  +) = c;.    sqli
3da0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3db0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
3dc0: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
3dd0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3de0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3e00: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3e10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3e20: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3e30: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3e40: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3e50: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
3e60: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3e70: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3e80: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3e90: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3ea0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3eb0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3ec0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3ed0: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3ee0: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3ef0: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3f00: 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28   z;.    }.    *(
3f10: 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20  zCsr++) = ']';. 
3f20: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a     if( f & MEM_Z
3f30: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
3f40: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3f50: 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70  0, zCsr,"+%dz",p
3f60: 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  Mem->u.nZero);. 
3f70: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3f80: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3f90: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a  r);.    }.    *z
3fa0: 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65  Csr = '\0';.  }e
3fb0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3fc0: 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a  Str ){.    int j
3fd0: 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d  , k;.    zBuf[0]
3fe0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20   = ' ';.    if( 
3ff0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
4000: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
4010: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
4020: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
4030: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
4040: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
4050: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
4060: 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  c ){.      zBuf[
4070: 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20  1] = 't';.      
4080: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4090: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
40a0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
40b0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
40c0: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  hem ){.      zBu
40d0: 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20  f[1] = 'e';.    
40e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
40f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
4100: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
4110: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66  else{.      zBuf
4120: 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d  [1] = 's';.    }
4130: 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20  .    k = 2;.    
4140: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4150: 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20  (100, &zBuf[k], 
4160: 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  "%d", pMem->n);.
4170: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
4180: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
4190: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
41a0: 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72  ] = '[';.    for
41b0: 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c  (j=0; j<15 && j<
41c0: 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20  pMem->n; j++){. 
41d0: 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d       u8 c = pMem
41e0: 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[j];.      if
41f0: 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30  ( c>=0x20 && c<0
4200: 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  x7f ){.        z
4210: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20  Buf[k++] = c;.  
4220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4230: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
4240: 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .';.      }.    
4250: 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  }.    zBuf[k++] 
4260: 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74  = ']';.    sqlit
4270: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4280: 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d  &zBuf[k], encnam
4290: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
42a0: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
42b0: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
42c0: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
42d0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  ] = 0;.  }.}.#en
42e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
42f0: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50  TE_DEBUG./*.** P
4300: 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f  rint the value o
4310: 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72  f a register for
4320: 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65   tracing purpose
4330: 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s:.*/.static voi
4340: 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28  d memTracePrint(
4350: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
4360: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e  ->flags & MEM_Un
4370: 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70  defined ){.    p
4380: 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65  rintf(" undefine
4390: 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d");.  }else if(
43a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
43b0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Null ){.    prin
43c0: 74 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  tf(p->flags & ME
43d0: 4d 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d  M_Zero ? " NULL-
43e0: 6e 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c  nochng" : " NULL
43f0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
4400: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
4410: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
4420: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
4430: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
4440: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
4450: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
4460: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4470: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
4480: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
4490: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
44b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
44c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
44d0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
44e0: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
44f0: 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a  p->u.r);.#endif.
4500: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
4510: 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
4520: 65 74 28 70 29 20 29 7b 0a 20 20 20 20 70 72 69  et(p) ){.    pri
4530: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
4540: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
4550: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
4560: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
4570: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
4580: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
4590: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
45a0: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
45b0: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
45c0: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
45d0: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
45e0: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
45f0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
4600: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
4610: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
4620: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
4630: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
4640: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
4650: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
4660: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
4670: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4680: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4690: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
46a0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
46b0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
46c0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
46d0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
46e0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
46f0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4700: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4710: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
4720: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
4730: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
4740: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
4750: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
4760: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
4770: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4780: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4790: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
47a0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
47b0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
47c0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
47d0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
47e0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
47f0: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4800: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4810: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
4820: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
4830: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
4840: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
4850: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
4860: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
4870: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4880: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4890: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
48a0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
48b0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
48c0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
48d0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
48e0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
48f0: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4900: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4910: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4920: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4930: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4940: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4950: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4960: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4970: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4980: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4990: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
49a0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
49b0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
49c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
49d0: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
49e0: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
49f0: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4a00: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4a10: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
4a20: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
4a30: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
4a40: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
4a50: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
4a60: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
4a70: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4a80: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4a90: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4aa0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4ab0: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4ac0: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4ad0: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4ae0: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4af0: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4b00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4b10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
4b20: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
4b30: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
4b40: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
4b50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
4b60: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
4b70: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4b80: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4b90: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4ba0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4bb0: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4bc0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4bd0: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4be0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4bf0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4c00: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4c10: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
4c20: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4c30: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4c40: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
4c50: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
4c60: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
4c70: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4c80: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4c90: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4cb0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4cc0: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4cd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4ce0: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4cf0: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4d10: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
4d20: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
4d30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
4d40: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
4d50: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
4d60: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
4d70: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4d80: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4d90: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4da0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4db0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4dc0: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4dd0: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4de0: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4df0: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4e00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4e10: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
4e20: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
4e30: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
4e40: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
4e50: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
4e60: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
4e70: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4e80: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4e90: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4ea0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4eb0: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4ec0: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4ed0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4ee0: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4ef0: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4f00: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4f10: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
4f20: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
4f30: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4f40: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
4f50: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
4f60: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
4f70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4f80: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4f90: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4fa0: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4fb0: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4fc0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4fd0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4fe0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4ff0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
5000: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
5010: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
5020: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
5030: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
5040: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
5050: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
5060: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
5070: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
5080: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
5090: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
50a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
50b0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
50c0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
50d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
50e0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
50f0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
5100: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
5110: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
5120: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
5130: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
5140: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
5150: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
5160: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
5170: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
5180: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
5190: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
51a0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
51b0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
51c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
51d0: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
51e0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
51f0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
5200: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
5210: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
5220: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
5230: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
5240: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
5250: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
5260: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
5270: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
5280: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
5290: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
52a0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
52b0: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
52c0: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
52d0: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
52e0: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
52f0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
5300: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
5310: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
5320: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
5330: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
5340: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
5350: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
5360: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
5370: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
5380: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
5390: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
53a0: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
53b0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
53c0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
53d0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
53e0: 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72 20  .    u32 iPrior 
53f0: 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  = p->aCounter[SQ
5400: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
5410: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73  VM_STEP];.    as
5420: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
5430: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
5440: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
5450: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
5460: 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20  Ops - (iPrior % 
5470: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5480: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
5490: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
54a0: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d   0xffffffff;.  }
54b0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
54c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
54d0: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
54e0: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
54f0: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
5500: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
5510: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
5520: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
5530: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
5540: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
5550: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
5560: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
5570: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
5580: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
5590: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
55a0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
55b0: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
55c0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
55d0: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
55e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
55f0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
5600: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
5610: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
5620: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
5630: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
5640: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
5650: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
5660: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
5670: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5680: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
5690: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
56a0: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
56b0: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
56c0: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
56d0: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
56e0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
56f0: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
5700: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
5710: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
5720: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
5730: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5740: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5750: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
5760: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
5770: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
5780: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
5790: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
57a0: 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d  (pOp=&aOp[p->pc]
57b0: 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20  ; 1; pOp++){.   
57c0: 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64   /* Errors are d
57d0: 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76  etected by indiv
57e0: 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77  idual opcodes, w
57f0: 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65  ith an immediate
5800: 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f  .    ** jumps to
5810: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
5820: 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ror. */.    asse
5830: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
5840: 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  K );..    assert
5850: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
5860: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
5870: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
5880: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
5890: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
58a0: 43 6e 74 20 3f 20 73 71 6c 69 74 65 33 4e 50 72  Cnt ? sqlite3NPr
58b0: 6f 66 69 6c 65 43 6e 74 20 3a 20 73 71 6c 69 74  ofileCnt : sqlit
58c0: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
58d0: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
58e0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
58f0: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
5900: 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70  STATUS.    if( p
5910: 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e  ->anExec ) p->an
5920: 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61  Exec[(int)(pOp-a
5930: 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  Op)]++;.#endif..
5940: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
5950: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
5960: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
5970: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
5980: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5990: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
59a0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
59b0: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
59c0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
59d0: 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28  p(stdout, (int)(
59e0: 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29  pOp - aOp), pOp)
59f0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5a00: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
5a10: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
5a20: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
5a30: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
5a40: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
5a50: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
5a60: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
5a70: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
5a80: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5a90: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
5aa0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5ab0: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
5ac0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5ad0: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
5ae0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5af0: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
5b00: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5b10: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
5b20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5b30: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53  #endif..    /* S
5b40: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5b50: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
5b60: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5b70: 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20  E_DEBUG.    {.  
5b80: 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74      u8 opPropert
5b90: 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  y = sqlite3Opcod
5ba0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5bb0: 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66  pcode];.      if
5bc0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5bd0: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5be0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5bf0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
5c00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5c10: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
5c20: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5c30: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5c40: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5c50: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
5c60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5c70: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5c80: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
5c90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5ca0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5cb0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
5cc0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
5cd0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5ce0: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5cf0: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5d00: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5d10: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5d20: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5d30: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
5d40: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5d50: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5d60: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5d70: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
5d80: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5d90: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5da0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5db0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  s(&aMem[pOp->p2]
5dc0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
5dd0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5de0: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5df0: 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
5e00: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5e10: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5e20: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5e30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5e40: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5e50: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5e60: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5e70: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5e80: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5e90: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5ea0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3]) );.        a
5eb0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5ec0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5ed0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5ee0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p3]) );.        
5ef0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5f00: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
5f10: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
5f20: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5f30: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
5f40: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5f50: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5f60: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5f70: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5f80: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5f90: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5fa0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5fb0: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
5fc0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
5fd0: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5fe0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5ff0: 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT3)!=0 ){.    
6000: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
6010: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
6020: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6030: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
6040: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6050: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
6060: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
6070: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
6080: 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a   }.    }.#endif.
6090: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
60a0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
60b0: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
60c0: 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d  E).    pOrigOp =
60d0: 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a   pOp;.#endif.  .
60e0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
60f0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
6150: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
6160: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
6170: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
6180: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
6190: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
61a0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
61b0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
61c0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
61d0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
61e0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
61f0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
6200: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
6210: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
6220: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
6230: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
6240: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
6250: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
6260: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
6270: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
6280: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
6290: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
62a0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
62b0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
62c0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
62d0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
62e0: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
62f0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
6300: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
6310: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
6320: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
6330: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
6340: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
6350: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
6360: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
6370: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
6380: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
6390: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
63a0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
63b0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
63c0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
63d0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
63e0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
63f0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
6400: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
6410: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
6420: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
6430: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
6440: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
6450: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
6460: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
6470: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
6480: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
6490: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
64a0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
64b0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
64c0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
64d0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
64e0: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
64f0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
6500: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
6510: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
6520: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
6530: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
6540: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
6550: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
6560: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
6570: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
6580: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
6590: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
65a0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
65b0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
65c0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
65d0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
65e0: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
65f0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
6600: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
6610: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
6620: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
6630: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f  n2, in3, out2, o
6640: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
6650: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
6660: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
6670: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
6680: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
6690: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
66a0: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
66b0: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
66c0: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
66d0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
66e0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
66f0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
6700: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
6710: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
6720: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
6730: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
6740: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
6750: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
6760: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
6770: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
6780: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
6790: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
67a0: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
67b0: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
67c0: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
67d0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
67e0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
67f0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6800: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6850: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6860: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6870: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6880: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6890: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
68a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
68b0: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
68c0: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
68d0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
68e0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
68f0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
6900: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
6910: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
6920: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
6930: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
6940: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
6950: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
6960: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
6970: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
6980: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
6990: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
69a0: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
69b0: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
69c0: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
69d0: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
69e0: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
69f0: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
6a00: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
6a10: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
6a20: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
6a30: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
6a40: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f  .jump_to_p2_and_
6a50: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6a60: 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  upt:.  pOp = &aO
6a70: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6a80: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
6a90: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
6aa0: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
6ab0: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
6ac0: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
6ad0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6ae0: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6af0: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6b00: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6b10: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6b20: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6b30: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
6b40: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
6b50: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6b60: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
6b70: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
6b80: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
6b90: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
6ba0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
6bb0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
6bc0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
6bd0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6be0: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6bf0: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6c00: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6c10: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6c20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6c30: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
6c40: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
6c50: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
6c60: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
6c70: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
6c80: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
6c90: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
6ca0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
6cb0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
6cc0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
6cd0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6ce0: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6cf0: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6d00: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6d10: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6d20: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6d30: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6d40: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
6d50: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
6d60: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
6d70: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
6d80: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
6d90: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
6da0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
6db0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
6dc0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
6dd0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6de0: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6df0: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6e00: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6e10: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6e20: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6e30: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
6e40: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6e50: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
6e60: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
6e70: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
6e80: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
6e90: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
6ea0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
6eb0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
6ec0: 73 73 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78  ssLimit && db->x
6ed0: 50 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20  Progress!=0 ){. 
6ee0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6ef0: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6f00: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6f10: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6f20: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6f30: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
6f40: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
6f50: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
6f60: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
6f70: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
6f80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
6f90: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
6fa0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
6fb0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
6fc0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
6fd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6fe0: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6ff0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
7000: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
7010: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
7020: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
7030: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
7040: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
7050: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
7060: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
7070: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7080: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
7090: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
70a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
70b0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
70c0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
70d0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
70e0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
70f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
7100: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
7110: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7120: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7130: 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20  nt)(pOp-aOp);.  
7140: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7150: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a  Op->p1, pIn1);..
7160: 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f    /* Most jump o
7170: 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67  perations do a g
7180: 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74  oto to this spot
7190: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
71a0: 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70  ate.  ** the pOp
71b0: 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d   pointer. */.jum
71c0: 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d  p_to_p2:.  pOp =
71d0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
71e0: 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1];.  break;.}..
71f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
7200: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
7210: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
7220: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7230: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
7240: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
7250: 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65  1.  After.** the
7260: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
7270: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
7280: 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
7290: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
72a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
72b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
72c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
72d0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
72e0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20  EM_Int );.  pOp 
72f0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
7300: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
7310: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
7320: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7330: 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72   Opcode: InitCor
7340: 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20  outine P1 P2 P3 
7350: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70  * *.**.** Set up
7360: 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20   register P1 so 
7370: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65  that it will Yie
7380: 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74  ld to the corout
7390: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
73a0: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
73b0: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
73c0: 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  n the coroutine 
73d0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
73e0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
73f0: 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  ws.** this opcod
7400: 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72  e.  So jump over
7410: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
7420: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
7430: 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a  .** address P2..
7440: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
7450: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  EndCoroutine.*/.
7460: 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f  case OP_InitCoro
7470: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20  utine: {     /* 
7480: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
7490: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20  ( pOp->p1>0 &&  
74a0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
74b0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
74c0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
74d0: 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70  Op->p2>=0 && pOp
74e0: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
74f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
7500: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
7510: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20  ->nOp );.  pOut 
7520: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7530: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62  ;.  assert( !Vdb
7540: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
7550: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ) );.  pOut->u.i
7560: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
7570: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7580: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70  MEM_Int;.  if( p
7590: 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
75a0: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
75b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
75c0: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
75d0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
75e0: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
75f0: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
7600: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
7610: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
7620: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
7630: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
7640: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
7650: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
7660: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
7670: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
7680: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
7690: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
76a0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
76b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
76c0: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
76d0: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
76e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
76f0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7700: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
7710: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7720: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
7730: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
7740: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
7750: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
7760: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
7770: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
7780: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
7790: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
77a0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
77b0: 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  Op );.  pOp = &a
77c0: 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d  Op[pCaller->p2 -
77d0: 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61   1];.  pIn1->fla
77e0: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
77f0: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
7800: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
7810: 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
7820: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
7830: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
7840: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
7850: 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69  egister P1.  Thi
7860: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66  s.** has the eff
7870: 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20  ect of yielding 
7880: 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a  to a coroutine..
7890: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72  **.** If the cor
78a0: 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c  outine that is l
78b0: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
78c0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
78d0: 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f   with.** Yield o
78e0: 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  r Return then co
78f0: 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65  ntinue to the ne
7900: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
7910: 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63   But if.** the c
7920: 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65  oroutine launche
7930: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7940: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
7950: 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c  ** EndCoroutine,
7960: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
7970: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e   rather than con
7980: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
7990: 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63  .** next instruc
79a0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
79b0: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
79c0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  ine.*/.case OP_Y
79d0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
79e0: 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20     /* in1, jump 
79f0: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
7a00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7a10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7a20: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7a30: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7a40: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7a50: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
7a60: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
7a70: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
7a80: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7a90: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
7aa0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
7ab0: 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  1);.  pOp = &aOp
7ac0: 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61  [pcDest];.  brea
7ad0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7ae0: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
7af0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
7b00: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
7b10: 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a  3]=null halt.**.
7b20: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
7b30: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7b40: 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c  3.  If it is NUL
7b50: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
7b60: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
7b70: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
7b80: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
7b90: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
7ba0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
7bb0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7bc0: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
7bd0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
7be0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20   is a no-op..** 
7bf0: 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
7c00: 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f   should be 1..*/
7c10: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
7c20: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
7c30: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
7c40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
7c50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
7c60: 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  UG.  if( pOp->p2
7c70: 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20 73 71  ==OE_Abort ){ sq
7c80: 6c 69 74 65 33 56 64 62 65 41 73 73 65 72 74 41  lite3VdbeAssertA
7c90: 62 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23  bortable(p); }.#
7ca0: 65 6e 64 69 66 0a 20 20 69 66 28 20 28 70 49 6e  endif.  if( (pIn
7cb0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
7cc0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
7cd0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7ce0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
7cf0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7d00: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7d10: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7d20: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7d30: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7d40: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7d50: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7d60: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7d70: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7d80: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7d90: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
7da0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
7db0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7dc0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
7dd0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
7de0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
7df0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7e00: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7e10: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7e20: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7e30: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7e40: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7e50: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7e60: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7e70: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7e80: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7e90: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
7ea0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
7eb0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
7ec0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
7ed0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
7ee0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
7ef0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7f00: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7f10: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7f20: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7f30: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7f50: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7f60: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7f70: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7f80: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7f90: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
7fa0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
7fb0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
7fc0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
7fd0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
7fe0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
7ff0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
8000: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
8010: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
8020: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
8030: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
8040: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
8050: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
8060: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
8070: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
8080: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
8090: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
80a0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
80b0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
80c0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
80d0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
80e0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
80f0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
8100: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
8110: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
8120: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
8130: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
8140: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
8150: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
8160: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
8170: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
8180: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
8190: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
81a0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
81b0: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
81c0: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
81d0: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
81e0: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 23 69 66 64  pOp - aOp);.#ifd
81f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8200: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
8210: 45 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74  E_Abort ){ sqlit
8220: 65 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72  e3VdbeAssertAbor
8230: 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64  table(p); }.#end
8240: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
8250: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
8260: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
8270: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
8280: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
8290: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
82a0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
82b0: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
82c0: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
82d0: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
82e0: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
82f0: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
8300: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
8310: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
8320: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
8330: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
8340: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
8350: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
8360: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
8370: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
8380: 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50  on pcx is the OP
8390: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
83a0: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
83b0: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
83c0: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
83d0: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
83e0: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
83f0: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
8400: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
8410: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
8420: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
8430: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
8440: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
8450: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
8460: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
8470: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
8480: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
8490: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
84a0: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
84b0: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
84c0: 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20   */.      pcx = 
84d0: 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31  p->aOp[pcx].p2-1
84e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
84f0: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
8500: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
8510: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78    pOp = &aOp[pcx
8520: 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
8530: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
8540: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
8550: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
8560: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
8570: 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  cx;.  assert( pO
8580: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66  p->p5<=4 );.  if
8590: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
85a0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
85b0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
85c0: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
85d0: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
85e0: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
85f0: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
8630: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65  KEY" };.      te
8640: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
8650: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
8660: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
8670: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
8680: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
8690: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
86a0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
86b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
86c0: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f  eError(p, "%s co
86d0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
86e0: 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  , azType[pOp->p5
86f0: 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  -1]);.      if( 
8700: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
8710: 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20       p->zErrMsg 
8720: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
8730: 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70  (db, "%z: %s", p
8740: 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e  ->zErrMsg, pOp->
8750: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p4.z);.      }. 
8760: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8770: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8780: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
8790: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
87a0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
87b0: 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25  >p1, "abort at %
87c0: 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20  d in [%s]: %s", 
87d0: 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  pcx, p->zSql, p-
87e0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
87f0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
8800: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
8810: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
8820: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
8830: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
8840: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
8850: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
8860: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
8870: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
8880: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
8890: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
88a0: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
88b0: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
88c0: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
88d0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
88e0: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
88f0: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
8900: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
8910: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
8920: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
8930: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
8940: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
8950: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8960: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
8970: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
8980: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8990: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
89a0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
89b0: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
89c0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
89d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
89e0: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
89f0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
8a00: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8a10: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8a20: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
8a30: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8a40: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
8a50: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8a60: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8a70: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8a80: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8a90: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8aa0: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8ab0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8ac0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8ad0: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
8ae0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8af0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8b00: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8b10: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8b20: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
8b30: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
8b40: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
8b50: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
8b60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8b70: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
8b80: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
8b90: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8ba0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8bb0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8bc0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
8bd0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
8be0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
8bf0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
8c00: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8c10: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
8c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8c30: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
8c40: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8c50: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8c60: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8c70: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
8c80: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
8c90: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
8ca0: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
8cb0: 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e  ut->u.r = *pOp->
8cc0: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
8cd0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
8ce0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
8cf0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
8d00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
8d10: 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P4'.**.** P4 poi
8d20: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
8d30: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
8d40: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
8d50: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
8d60: 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69   .** into a Stri
8d70: 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65  ng opcode before
8d80: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
8d90: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
8da0: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
8db0: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
8dc0: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
8dd0: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
8de0: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
8df0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
8e00: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
8e10: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
8e20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8e30: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
8e40: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
8e50: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8e60: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8e70: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8e80: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
8e90: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
8ea0: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
8eb0: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
8ec0: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
8ed0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
8ee0: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
8ef0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
8f00: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
8f10: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
8f20: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
8f30: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
8f40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8f50: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8f60: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
8f70: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
8f80: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8f90: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8fa0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8fb0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
8fc0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
8fd0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8fe0: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
8ff0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
9000: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
9010: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
9020: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
9030: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
9040: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
9050: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
9060: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
9070: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
9080: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
9090: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
90a0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
90b0: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
90c0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
90d0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
90e0: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
90f0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
9100: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
9110: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
9120: 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  G );.#endif.  if
9130: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
9140: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
9150: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
9160: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9170: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d   }.  assert( rc=
9180: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
9190: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
91a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
91b0: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
91c0: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
91d0: 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50  tring P1 P2 P3 P
91e0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
91f0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
9200: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
9210: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
9220: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
9230: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
9240: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9250: 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f  *.** If P3 is no
9260: 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63  t zero and the c
9270: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
9280: 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20 74  er P3 is equal t
9290: 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  o P5, then.** th
92a0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
92b0: 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  e register P2 is
92c0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c   converted to BL
92d0: 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  OB.  The content
92e0: 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20   is.** the same 
92f0: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
9300: 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20  s, it is merely 
9310: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
9320: 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a   BLOB instead.**
9330: 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73   of a string, as
9340: 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20   if it had been 
9350: 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20  CAST.  In other 
9360: 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28  words:.**.** if(
9370: 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50   P3!=0 and reg[P
9380: 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d  3]==P5 ) reg[P2]
9390: 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d   := CAST(reg[P2]
93a0: 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73   as BLOB).*/.cas
93b0: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
93c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
93d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
93e0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
93f0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9400: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9410: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9420: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
9430: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
9440: 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  t->z = pOp->p4.z
9450: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f  ;.  pOut->n = pO
9460: 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65  p->p1;.  pOut->e
9470: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9480: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9490: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e  SIZE(pOut);.#ifn
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f  def SQLITE_LIKE_
94b0: 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f  DOESNT_MATCH_BLO
94c0: 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  BS.  if( pOp->p3
94d0: 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  >0 ){.    assert
94e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
94f0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9500: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
9510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
9520: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
9530: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
9540: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
9550: 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70  In3->u.i==pOp->p
9560: 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  5 ) pOut->flags 
9570: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53  = MEM_Blob|MEM_S
9580: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
9590: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65    }.#endif.  bre
95a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
95b0: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
95c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
95d0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
95e0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
95f0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9600: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
9610: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
9620: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
9630: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
9640: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
9650: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
9660: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
9670: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
9680: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
9690: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
96a0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
96b0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
96c0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
96d0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
96e0: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
96f0: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
9700: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
9710: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
9720: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
9730: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
9740: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
9750: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
9760: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
9770: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
9780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9790: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
97a0: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
97b0: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
97c0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
97d0: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
97e0: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
97f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
9800: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
9810: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
9820: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
9830: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
9840: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
9850: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
9860: 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ull;.  pOut->n =
9870: 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
9880: 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e  E_DEBUG.  pOut->
9890: 75 54 65 6d 70 20 3d 20 30 3b 0a 23 65 6e 64 69  uTemp = 0;.#endi
98a0: 66 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30  f.  while( cnt>0
98b0: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a   ){.    pOut++;.
98c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
98d0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
98e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
98f0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9900: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
9910: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
9920: 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20  pOut->n = 0;.   
9930: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
9940: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9950: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
9960: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9970: 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  is: r[P1]=NULL.*
9980: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
9990: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
99a0: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
99b0: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
99c0: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
99d0: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
99e0: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
99f0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
9a00: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
9a10: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
9a20: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
9a30: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
9a40: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
9a50: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
9a60: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
9a70: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
9a80: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
9a90: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
9aa0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
9ab0: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
9ac0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
9ad0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
9ae0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
9af0: 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  ) );.  pOut = &a
9b00: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9b10: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pOut->flags = (p
9b20: 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d  Out->flags&~(MEM
9b30: 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41  _Undefined|MEM_A
9b40: 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c  ffMask))|MEM_Nul
9b50: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  l;.  break;.}../
9b60: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
9b70: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9b80: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
9b90: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
9ba0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
9bb0: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
9bc0: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
9bd0: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
9be0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
9bf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
9c00: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
9c10: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
9c20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
9c30: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
9c40: 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  GTH );.  pOut = 
9c50: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9c60: 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65  , pOp);.  sqlite
9c70: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
9c80: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
9c90: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
9ca0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9cb0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9cc0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9cd0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9ce0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
9cf0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
9d00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9d10: 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50  [P2]=parameter(P
9d20: 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  1,P4).**.** Tran
9d30: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
9d40: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
9d50: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
9d60: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
9d70: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
9d80: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
9d90: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
9da0: 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76   P4..** The P4 v
9db0: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
9dc0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9dd0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
9de0: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
9df0: 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  le: {           
9e00: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65   /* out2 */.  Me
9e10: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
9e20: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
9e30: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
9e40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9e50: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
9e60: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
9e70: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
9e80: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71  || pOp->p4.z==sq
9e90: 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
9ea0: 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f  ame(p->pVList,pO
9eb0: 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72  p->p1) );.  pVar
9ec0: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
9ed0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
9ee0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
9ef0: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
9f00: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9f10: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
9f20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
9f30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9f40: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9f50: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
9f60: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9f70: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9f80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9f90: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9fa0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9fb0: 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b  sis: r[P2@P3]=r[
9fc0: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
9fd0: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9fe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9ff0: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
a000: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
a010: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
a020: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
a030: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
a040: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
a050: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
a060: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
a070: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
a080: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
a090: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
a0a0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
a0b0: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
a0c0: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
a0d0: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
a0e0: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
a0f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
a100: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
a110: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
a120: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
a130: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
a140: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
a150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a160: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
a170: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
a180: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
a190: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
a1a0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
a1b0: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
a1c0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a1d0: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
a1e0: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
a1f0: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
a200: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
a210: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
a220: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
a230: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a240: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
a250: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
a260: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
a270: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
a280: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
a290: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
a2a0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
a2b0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
a2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a2d0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
a2e0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
a2f0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
a300: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
a310: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
a320: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
a330: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
a340: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
a350: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
a360: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
a370: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
a380: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
a390: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
a3a0: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
a3b0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
a3c0: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
a3d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a3e0: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
a3f0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a400: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
a410: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
a420: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
a430: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
a440: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
a450: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
a460: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
a470: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
a480: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
a490: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
a4a0: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
a4b0: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
a4c0: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
a4d0: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
a4e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
a4f0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
a500: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
a510: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a520: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
a530: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a540: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
a550: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
a560: 31 20 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  1 ){.    memAbou
a570: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
a580: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
a590: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
a5a0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
a5b0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
a5c0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
a5d0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
a5e0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
a5f0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
a600: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
a610: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a620: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
a630: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
a640: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
a650: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a660: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
a670: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a680: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a6a0: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a6b0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a6c0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a6d0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a6e0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a6f0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a700: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a710: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a720: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a730: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a740: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a750: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a760: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a770: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a780: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a790: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a7a0: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a7b0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a7c0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a7d0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a7e0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a7f0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a800: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a810: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a820: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a830: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a840: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a850: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a860: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a870: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a880: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a890: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a8a0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a8b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a8c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a8d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a8e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a8f0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a900: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a910: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a920: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a930: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a940: 47 0a 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  G.  pOut->pScopy
a950: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70  From = pIn1;.  p
a960: 4f 75 74 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73  Out->mScopyFlags
a970: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
a980: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
a990: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
a9a0: 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  tCopy P1 P2 * * 
a9b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a9c0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a9d0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e   Transfer the in
a9e0: 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
a9f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
aa00: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
aa10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
aa20: 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72  an optimized ver
aa30: 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68  sion of SCopy th
aa40: 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f  at works only fo
aa50: 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c  r integer.** val
aa60: 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ues..*/.case OP_
aa70: 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  IntCopy: {      
aa80: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
aa90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
aaa0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
aab0: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
aac0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
aad0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
aae0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
aaf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
ab00: 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e  t64(pOut, pIn1->
ab10: 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
ab20: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
ab30: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
ab40: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
ab50: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
ab60: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
ab70: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
ab80: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
ab90: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
aba0: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
abb0: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
abc0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
abd0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
abe0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
abf0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
ac00: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
ac10: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
ac20: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
ac30: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
ac40: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
ac50: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
ac60: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
ac70: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
ac80: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
ac90: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
aca0: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
acb0: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
acc0: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
acd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
ace0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
acf0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
ad00: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
ad10: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
ad20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ad30: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
ad40: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
ad50: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
ad60: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
ad70: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
ad80: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
ad90: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
ada0: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
adb0: 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  t .   && db->xPr
adc0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
add0: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
ade0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
adf0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
ae00: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
ae10: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e  o_error;.  }.#en
ae20: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
ae30: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
ae40: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
ae50: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
ae60: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
ae70: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
ae80: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
ae90: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
aea0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
aeb0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
aec0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
aed0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
aee0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
aef0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
af00: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
af10: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
af20: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
af30: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
af40: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
af50: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
af60: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
af70: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
af80: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
af90: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
afa0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
afb0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
afc0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
afd0: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
afe0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
aff0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
b000: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
b010: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
b020: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
b030: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
b040: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
b050: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
b060: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
b070: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
b080: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
b090: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
b0a0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
b0b0: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
b0c0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
b0d0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
b0e0: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
b0f0: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
b100: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
b110: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
b120: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
b130: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
b140: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
b150: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
b160: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
b170: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
b180: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
b190: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
b1a0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
b1b0: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
b1c0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
b1d0: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
b1e0: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
b1f0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
b200: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
b210: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
b220: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
b230: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
b240: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
b250: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
b260: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
b270: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
b280: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
b290: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
b2a0: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
b2b0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
b2c0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
b2d0: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
b2e0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
b2f0: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
b300: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
b310: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
b320: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
b330: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
b340: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49  TE_OK );..  /* I
b350: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
b360: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
b370: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
b380: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
b390: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
b3a0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
b3b0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
b3c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
b3d0: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
b3e0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
b3f0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
b400: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
b410: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
b420: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
b430: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
b440: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
b450: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
b460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
b470: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
b480: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
b490: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
b4a0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
b4b0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
b4c0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
b4d0: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
b4e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
b4f0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
b500: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
b510: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
b520: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
b530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b540: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
b550: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
b560: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b570: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
b580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
b590: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
b5a0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69  oto no_mem;..  i
b5b0: 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20  f( db->mTrace & 
b5c0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
b5d0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61   ){.    db->xTra
b5e0: 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ce(SQLITE_TRACE_
b5f0: 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41  ROW, db->pTraceA
b600: 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a  rg, p, 0);.  }..
b610: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
b620: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
b630: 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
b640: 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63  - aOp) + 1;.  rc
b650: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
b660: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
b670: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
b680: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
b690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b6a0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
b6b0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P1].**.** Add th
b6c0: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
b6d0: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
b6e0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
b6f0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
b700: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b710: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b720: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b730: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
b740: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
b750: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
b760: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
b770: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
b780: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
b790: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
b7a0: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
b7b0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
b7c0: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
b7d0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
b7e0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
b7f0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
b800: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
b810: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
b820: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
b830: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b840: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
b850: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b860: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
b870: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b880: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b890: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b8a0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b8b0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
b8c0: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
b8d0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
b8e0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b8f0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
b900: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b910: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
b920: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
b930: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
b940: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
b950: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
b960: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
b970: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
b980: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
b990: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
b9a0: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
b9b0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
b9c0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
b9d0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
b9e0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
b9f0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
ba00: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
ba10: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
ba20: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
ba30: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
ba40: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
ba50: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
ba60: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ba70: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
ba80: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
ba90: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
baa0: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
bab0: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
bac0: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
bad0: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
bae0: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
baf0: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
bb00: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
bb10: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
bb20: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
bb30: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
bb40: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
bb50: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
bb60: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
bb70: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
bb80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bb90: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
bba0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bbb0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
bbc0: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
bbd0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
bbe0: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
bbf0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
bc00: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
bc10: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bc20: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bc30: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bc40: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bc50: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bc60: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
bc70: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
bc80: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
bc90: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
bca0: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
bcb0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bcc0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
bcd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bce0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
bcf0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
bd00: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
bd10: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
bd20: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
bd30: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
bd40: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
bd50: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
bd60: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
bd70: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
bd80: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
bd90: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bda0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
bdb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bdc0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
bdd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bde0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bdf0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
be00: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
be10: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
be20: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
be30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
be40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
be50: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
be60: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
be70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
be80: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
be90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
bea0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
beb0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
bec0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
bed0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
bee0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
bef0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
bf00: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
bf10: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
bf20: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
bf30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bf40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
bf50: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
bf60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
bf70: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
bf80: 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  2]%r[P1].**.** C
bf90: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
bfa0: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
bfb0: 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69  er register P2 i
bfc0: 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a  s divided by .**
bfd0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
bfe0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bff0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c000: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
c010: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c020: 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  1 is zero the re
c030: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
c040: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
c050: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
c060: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c070: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c090: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c0a0: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
c0b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c0c0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
c0d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c0e0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
c0f0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
c100: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c120: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
c130: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c140: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
c150: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
c160: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c170: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
c180: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
c190: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
c1a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c1b0: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
c1c0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63  in2, out3 */.  c
c1d0: 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f  har bIntint;   /
c1e0: 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73  * Started out as
c1f0: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65   two integer ope
c200: 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66  rands */.  u16 f
c210: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
c220: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
c230: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
c240: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
c250: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
c260: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
c270: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
c280: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
c290: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
c2a0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
c2b0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
c2c0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
c2d0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
c2e0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
c2f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
c300: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
c310: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
c320: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
c330: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
c340: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
c350: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
c360: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
c370: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
c380: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
c390: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c3a0: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
c3b0: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
c3c0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
c3d0: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
c3e0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
c3f0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
c400: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
c410: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
c420: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
c430: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
c440: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
c450: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
c460: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
c470: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
c480: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
c490: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c4a0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c4b0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c4c0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
c4d0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
c4e0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
c4f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c500: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
c510: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
c520: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
c530: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
c540: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c550: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
c560: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
c570: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
c580: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
c590: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c5a0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
c5b0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c5c0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c5d0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c5e0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c5f0: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
c600: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
c610: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
c620: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
c630: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c640: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
c650: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c660: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c670: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c680: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c690: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c6a0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
c6b0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
c6c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c6d0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c6e0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
c6f0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c700: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
c710: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
c720: 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
c730: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c740: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c750: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49  .  }else{.    bI
c760: 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61  ntint = 0;.fp_ma
c770: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
c780: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
c790: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
c7a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
c7b0: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
c7c0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
c7d0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
c7e0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c7f0: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
c800: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c810: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
c820: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
c830: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c840: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
c850: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
c860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c870: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
c880: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
c890: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
c8a0: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
c8b0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
c8c0: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
c8d0: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
c8e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c8f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c900: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
c910: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
c920: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c930: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
c940: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
c950: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
c960: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
c970: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c980: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c990: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c9a0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c9b0: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
c9c0: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
c9d0: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
c9e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c9f0: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
ca00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
ca10: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
ca20: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
ca30: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ca40: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ca50: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
ca60: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
ca70: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
ca80: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
ca90: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
caa0: 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72     pOut->u.r = r
cab0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
cac0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
cad0: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
cae0: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
caf0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
cb00: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
cb10: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
cb20: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
cb30: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
cb40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
cb50: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
cb60: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
cb70: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
cb80: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
cb90: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
cba0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
cbb0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
cbc0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
cbd0: 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20 74 68  eq object. If th
cbe0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
cbf0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
cc00: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
cc10: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
cc20: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
cc30: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
cc40: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
cc50: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
cc60: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
cc70: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
cc80: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
cc90: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
cca0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
ccb0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
ccc0: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
ccd0: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
cce0: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
ccf0: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
cd00: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
cd10: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
cd20: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
cd30: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
cd40: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
cd50: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
cd60: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
cd70: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
cd80: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
cd90: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
cda0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
cdb0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
cdc0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
cdd0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
cde0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
cdf0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
ce00: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
ce10: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20  le.** publicly. 
ce20: 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66   Only built-in f
ce30: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63  unctions have ac
ce40: 63 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61  cess to this fea
ce50: 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
ce60: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
ce70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ce80: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
ce90: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
cea0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
ceb0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
cec0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
ced0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
cee0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
cef0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
cf00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
cf10: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
cf20: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
cf30: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
cf40: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
cf50: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
cf60: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
cf70: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cf80: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cf90: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cfa0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cfb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
cfc0: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
cfd0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
cfe0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
cff0: 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  |r[P2].**.** Tak
d000: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
d010: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
d020: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d030: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
d040: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d050: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d060: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d070: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d080: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d090: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
d0a0: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
d0b0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d0c0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
d0d0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
d0e0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
d0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
d100: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
d110: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
d120: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
d130: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
d140: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d150: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
d160: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
d170: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
d180: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
d190: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
d1a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d1b0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
d1c0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d1d0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
d1e0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
d1f0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
d200: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d210: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
d220: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
d230: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
d240: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
d250: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
d260: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
d270: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d280: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d290: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d2a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d2b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
d2c0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d2e0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
d2f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d300: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
d310: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d320: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d330: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
d340: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
d350: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
d360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d370: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
d380: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d390: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
d3a0: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
d3b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d3c0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
d3d0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
d3e0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
d3f0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
d400: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
d410: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
d420: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
d430: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
d440: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d450: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d460: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
d470: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
d480: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
d490: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
d4a0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
d4b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
d4c0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
d4d0: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
d4e0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
d4f0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
d500: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
d510: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
d520: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
d530: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
d540: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
d550: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
d560: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
d570: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
d580: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
d590: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
d5a0: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
d5b0: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
d5c0: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
d5d0: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
d5e0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
d5f0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
d600: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
d610: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
d620: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
d630: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
d640: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
d650: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
d660: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
d670: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
d680: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
d690: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
d6a0: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
d6b0: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
d6c0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
d6d0: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
d6e0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
d6f0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
d700: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
d710: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
d720: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
d730: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
d740: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
d750: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
d760: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
d770: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
d780: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
d790: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
d7a0: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
d7b0: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
d7c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
d7d0: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
d7e0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
d7f0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
d800: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
d810: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d820: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
d830: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
d840: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
d850: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d860: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d870: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d880: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d890: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d8a0: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d8b0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d8c0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d8d0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d8e0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d8f0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d900: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d910: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d920: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d930: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d940: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d950: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d960: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d970: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d980: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d990: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d9a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d9b0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d9c0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d9d0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d9e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d9f0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
da00: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
da10: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
da20: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
da30: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
da40: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
da50: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
da60: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
da70: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
da80: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
da90: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
daa0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
dab0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
dac0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
dad0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
dae0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
daf0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db00: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
db10: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
db20: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
db30: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
db40: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
db50: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
db60: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
db70: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
db80: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
db90: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
dba0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
dbb0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
dbc0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
dbd0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
dbe0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
dbf0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
dc00: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
dc10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
dc20: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
dc30: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
dc40: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
dc50: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
dc60: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
dc70: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
dc80: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
dc90: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
dca0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
dcb0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
dcc0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
dcd0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
dce0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
dcf0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
dd00: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
dd10: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
dd20: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
dd30: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
dd40: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
dd50: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
dd60: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
dd70: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
dd80: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
dd90: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
dda0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
ddb0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
ddc0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
ddd0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
dde0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
ddf0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
de00: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
de10: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
de20: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
de30: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
de40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
de50: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
de60: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
de70: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
de80: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
de90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
dea0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
deb0: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
dec0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
ded0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
dee0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
def0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
df00: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
df10: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
df20: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
df30: 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41  >.** <li> P2=='A
df40: 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a  ' &rarr; BLOB.**
df50: 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72   <li> P2=='B' &r
df60: 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  arr; TEXT.** <li
df70: 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b  > P2=='C' &rarr;
df80: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e   NUMERIC.** <li>
df90: 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20   P2=='D' &rarr; 
dfa0: 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20  INTEGER.** <li> 
dfb0: 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52  P2=='E' &rarr; R
dfc0: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
dfd0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
dfe0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
dff0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
e000: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
e010: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
e020: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e030: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
e040: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e050: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2>=SQLITE_AFF_BL
e060: 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  OB && pOp->p2<=S
e070: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
e080: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e090: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e0a0: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
e0b0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e0c0: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29  QLITE_AFF_BLOB )
e0d0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e0e0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e0f0: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
e100: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e110: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
e120: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
e130: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e140: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e150: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e160: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
e170: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
e180: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
e190: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
e1a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
e1b0: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
e1c0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
e1d0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
e1e0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  IZE(pIn1);.  if(
e1f0: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
e200: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
e210: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
e220: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
e230: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
e240: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
e250: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e260: 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50  s: IF r[P3]==r[P
e270: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  1].**.** Compare
e280: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
e290: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
e2a0: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d  3.  If reg(P3)==
e2b0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e2c0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e2d0: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
e2e0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
e2f0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c  ag is set in P5,
e300: 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74   then.** store t
e310: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e320: 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73  parison in regis
e330: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
e340: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e350: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e360: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e370: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e380: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e390: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e3a0: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e3b0: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e3c0: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e3d0: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e3e0: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e3f0: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e400: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e410: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e420: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e430: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e440: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e450: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e460: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e470: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e480: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
e490: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
e4a0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
e4b0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
e4c0: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
e4d0: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
e4e0: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
e4f0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e500: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
e510: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
e520: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
e530: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
e540: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
e550: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
e560: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
e570: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
e580: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
e590: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
e5a0: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
e5b0: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
e5c0: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
e5d0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
e5e0: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
e5f0: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
e600: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
e610: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
e620: 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65  s used to do the
e630: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e640: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e650: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e660: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e670: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e680: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e690: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e6a0: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e6b0: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e6c0: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e6d0: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e6e0: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e6f0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e700: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e710: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e720: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e730: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e740: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e750: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  s..**.** If SQLI
e760: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e770: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e780: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e790: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e7a0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e7b0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e7c0: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e7d0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e7e0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e7f0: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e800: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
e810: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e820: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e830: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
e840: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
e850: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e860: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e870: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e880: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e890: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e8a0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e8b0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a  d from P5..**.**
e8c0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e8d0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e8e0: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e8f0: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e900: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e910: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e920: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e930: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e940: 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a  or 0 (false)..**
e950: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
e960: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
e970: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
e980: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
e990: 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20  1 (true)..*/./* 
e9a0: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e9b0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e9c0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21  opsis: IF r[P3]!
e9d0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
e9e0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e9f0: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
ea00: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ea10: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ea20: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
ea30: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
ea40: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
ea50: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
ea60: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Eq opcode for.**
ea70: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ea80: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
ea90: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
eaa0: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
eab0: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
eac0: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
ead0: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
eae0: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
eaf0: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
eb00: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
eb10: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e   1 (true)..** In
eb20: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20   other words, a 
eb30: 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75  prior r[P2] valu
eb40: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76  e will not be ov
eb50: 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20 28  erwritten by 0 (
eb60: 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  false)..*/./* Op
eb70: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
eb80: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eb90: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b  sis: IF r[P3]<r[
eba0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
ebb0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
ebc0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ebd0: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
ebe0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
ebf0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
ec00: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
ec10: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
ec20: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  ag is set in P5 
ec30: 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73  store.** the res
ec40: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
ec50: 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c  n (0 or 1 or NUL
ec60: 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  L) into register
ec70: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
ec80: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
ec90: 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73  ULL bit of P5 is
eca0: 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20   set and either 
ecb0: 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65  reg(P1) or.** re
ecc0: 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68  g(P3) is NULL th
ecd0: 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65 20  en the take the 
ece0: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
ecf0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
ed00: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
ed10: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
ed20: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
ed30: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
ed40: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ed50: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
ed60: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
ed70: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
ed80: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
ed90: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
eda0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
edb0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
edc0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
edd0: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
ede0: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
edf0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
ee00: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
ee10: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
ee20: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
ee30: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
ee40: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
ee50: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
ee60: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
ee70: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
ee80: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
ee90: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
eea0: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
eeb0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
eec0: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
eed0: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
eee0: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
eef0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
ef00: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
ef10: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
ef20: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
ef30: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
ef40: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
ef50: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
ef60: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
ef70: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ef80: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
ef90: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
efa0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
efb0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
efc0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
efd0: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
efe0: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
eff0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
f000: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
f010: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
f020: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
f030: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
f040: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
f050: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
f060: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
f070: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
f080: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
f090: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
f0a0: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
f0b0: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
f0c0: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
f0d0: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
f0e0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
f0f0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
f100: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
f110: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
f120: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
f130: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
f140: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
f150: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20  an blobs..*/./* 
f160: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
f170: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f180: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
f190: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
f1a0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f1b0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f1c0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f1d0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f1e0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f1f0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f200: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f210: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f220: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f230: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f240: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f250: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f260: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f270: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f280: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f290: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31  s: IF r[P3]>r[P1
f2a0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
f2b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f2c0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f2d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f2e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f2f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
f300: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
f310: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
f320: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f330: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f340: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f350: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f360: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
f370: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
f380: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f390: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72  sis: IF r[P3]>=r
f3a0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
f3b0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f3c0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f3d0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f3e0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f3f0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f400: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f410: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f420: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f430: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
f440: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
f450: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
f460: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f470: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
f480: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
f490: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f4a0: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
f4b0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f4c0: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
f4d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f4e0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
f4f0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
f500: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f510: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
f520: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f530: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f550: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
f560: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f570: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
f580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f590: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
f5a0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f5b0: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
f5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f5d0: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
f5e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
f5f0: 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20  int res, res2;  
f600: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
f610: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f620: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
f630: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
f640: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f650: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
f660: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
f670: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
f680: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f690: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f6a0: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
f6b0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
f6c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
f6d0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
f6e0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
f6f0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
f700: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f710: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
f720: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
f730: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
f740: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
f750: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
f760: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
f770: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f780: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
f790: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f7a0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
f7b0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
f7c0: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
f7d0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f7e0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
f7f0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
f800: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
f810: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
f820: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
f830: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
f840: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
f850: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
f860: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
f870: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
f880: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
f890: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
f8a0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
f8b0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f8c0: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
f8d0: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
f8e0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
f8f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f900: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f910: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
f920: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
f930: 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f  ags1&flags3&MEM_
f940: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
f950: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
f960: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
f970: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
f980: 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 0;  /* Operand
f990: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
f9a0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f9b0: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
f9c0: 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f   Operands are no
f9d0: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
f9e0: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
f9f0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
fa00: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
fa10: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
fa20: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
fa30: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
fa40: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
fa50: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
fa60: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
fa70: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
fa80: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
fa90: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
faa0: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
fab0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
fac0: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
fad0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
fae0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69  ->p2];.        i
faf0: 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20  Compare = 1;    
fb00: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
fb10: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fb20: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
fb30: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
fb40: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
fb50: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
fb60: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
fb70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
fb80: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
fb90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
fba0: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
fbb0: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
fbc0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
fbd0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
fbe0: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
fbf0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
fc00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fc10: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
fc20: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
fc30: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
fc40: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
fc50: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
fc60: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
fc70: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
fc80: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
fc90: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
fca0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
fcb0: 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
fcc0: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
fcd0: 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
fce0: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
fcf0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
fd00: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
fd10: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
fd20: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
fd30: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
fd40: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
fd50: 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49 6e 33  rt( flags3==pIn3
fd60: 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
fd70: 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61 73 65       /* testcase
fd80: 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e  ( flags3!=pIn3->
fd90: 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20 20 20  flags );.       
fda0: 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65 64 20     ** this used 
fdb0: 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65 20 77  to be possible w
fdc0: 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33 2c 20  ith pIn1==pIn3, 
fdd0: 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a 20 20  but not since.  
fde0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63          ** the c
fdf0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61 73 20  olumn cache was 
fe00: 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20 66 6f  removed.  The fo
fe10: 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e 6d 65  llowing assignme
fe20: 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  nt.          ** 
fe30: 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 61  is essentially a
fe40: 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20 69 74   no-op.  But, it
fe50: 20 70 72 6f 76 69 64 65 73 20 64 65 66 65 6e 73   provides defens
fe60: 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20 20 20  e-in-depth.     
fe70: 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20       ** in case 
fe80: 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69 73 20  our analysis is 
fe90: 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20 69 74  incorrect, so it
fea0: 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a 2f 0a   is left in. */.
feb0: 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 33            flags3
fec0: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
fed0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fee0: 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
fef0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
ff00: 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
ff10: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
ff20: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
ff30: 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a  finity(pIn3,0);.
ff40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ff50: 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c  }.      /* Handl
ff60: 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
ff70: 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d  e of integer com
ff80: 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73  parison here, as
ff90: 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74   an.      ** opt
ffa0: 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76  imization, to av
ffb0: 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  oid a call to sq
ffc0: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
ffd0: 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  ) */.      if( (
ffe0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
fff0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10000 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  Int)!=0 ){.     
10010 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
10020 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20   > pIn1->u.i ){ 
10030 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63  res = +1; goto c
10040 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20  ompare_op; }.   
10050 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10060 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i < pIn1->u.i )
10070 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f  { res = -1; goto
10080 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10090 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
100a0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d          goto com
100b0 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d  pare_op;.      }
100c0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61  .    }else if( a
100d0 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
100e0 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
100f0 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20    if( (flags1 & 
10100 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
10110 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
10120 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
10130 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
10140 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10150 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10160 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10170 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10180 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
10190 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
101a0 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
101b0 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
101c0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
101d0 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
101e0 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
101f0 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
10200 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
10210 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
10220 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
10230 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
10240 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20 61  Mask);.        a
10250 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49 6e  ssert( pIn1!=pIn
10260 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3 );.      }.   
10270 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
10280 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10290 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
102a0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
102b0 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
102c0 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
102d0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
102e0 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
102f0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10300 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
10310 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10320 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
10330 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
10340 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10350 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
10360 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
10370 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
10380 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
10390 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
103a0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
103b0 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
103c0 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
103d0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
103e0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
103f0 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
10400 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
10410 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
10420 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
10430 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
10440 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d  .pColl);.  }.com
10450 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74  pare_op:.  /* At
10460 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65 73   this point, res
10470 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a 65   is negative, ze
10480 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 20  ro, or positive 
10490 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20 20  if reg[P1] is.  
104a0 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71  ** less than, eq
104b0 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
104c0 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d 2c  er than reg[P3],
104d0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
104e0 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68 65  Compute.  ** the
104f0 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73 20   answer to this 
10500 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73 32  operator in res2
10510 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
10520 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69 73  hat the comparis
10530 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f 72  on.  ** operator
10540 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20 54   actually is.  T
10550 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
10560 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f 6e   code depends on
10570 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20 74   the fact.  ** t
10580 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61 72  hat the 6 compar
10590 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 61  ison operators a
105a0 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20 69  re consecutive i
105b0 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73 0a  ntegers in this.
105c0 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45 2c    ** order:  NE,
105d0 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54 2c   EQ, GT, LE, LT,
105e0 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   GE */.  assert(
105f0 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20   OP_Eq==OP_Ne+1 
10600 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 74  ); assert( OP_Gt
10610 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73 73  ==OP_Ne+2 ); ass
10620 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e  ert( OP_Le==OP_N
10630 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e+3 );.  assert(
10640 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20   OP_Lt==OP_Ne+4 
10650 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 65  ); assert( OP_Ge
10660 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20 69  ==OP_Ne+5 );.  i
10670 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20 20  f( res<0 ){     
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67 74     /* ne, eq, gt
106a0 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a  , le, lt, ge */.
106b0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
106c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
106d0 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c  LTb[] = { 1,  0,
106e0 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30 20    0,  1,  1,  0 
106f0 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 4c  };.    res2 = aL
10700 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Tb[pOp->opcode -
10710 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
10720 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
10730 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
10740 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 45  unsigned char aE
10750 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c 20  Qb[] = { 0,  1, 
10760 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20 7d   0,  1,  0,  1 }
10770 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45 51  ;.    res2 = aEQ
10780 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20  b[pOp->opcode - 
10790 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b  OP_Ne];.  }else{
107a0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
107b0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
107c0 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aGTb[] = { 1,  0
107d0 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31  ,  1,  0,  0,  1
107e0 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
107f0 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  GTb[pOp->opcode 
10800 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20  - OP_Ne];.  }.. 
10810 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
10820 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
10830 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
10840 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
10850 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ers. */.  assert
10860 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10870 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
10880 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags1 & MEM_Dyn) 
10890 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
108a0 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73   = flags1;.  ass
108b0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
108c0 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
108d0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79  (flags3 & MEM_Dy
108e0 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  n) );.  pIn3->fl
108f0 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20  ags = flags3;.. 
10900 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10910 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10920 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
10930 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
10940 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a  iCompare = res;.
10950 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
10960 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55   & SQLITE_KEEPNU
10970 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  LL)!=0 ){.      
10980 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20  /* The KEEPNULL 
10990 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50  flag prevents OP
109a0 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Eq from overwri
109b0 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68  ting a NULL with
109c0 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20   1.      ** and 
109d0 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66  prevents OP_Ne f
109e0 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
109f0 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68  NULL with 0.  Th
10a00 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a  is flag.      **
10a10 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e   is only used in
10a20 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
10a30 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a  either:.      **
10a40 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71     (1) op==OP_Eq
10a50 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
10a60 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20   || r[P2]==0).  
10a70 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d      **   (2) op=
10a80 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d  =OP_Ne && (r[P2]
10a90 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d  ==NULL || r[P2]=
10aa0 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  =1).      ** The
10ab0 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74  refore it is not
10ac0 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 68   necessary to ch
10ad0 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  eck the content 
10ae0 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20  of r[P2] for.   
10af0 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20     ** NULL. */. 
10b00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
10b10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
10b20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
10b30 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61  OP_Eq );.      a
10b40 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c  ssert( res2==0 |
10b50 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20  | res2==1 );.   
10b60 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
10b70 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
10b80 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
10b90 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
10ba0 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
10bb0 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
10bc0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10bd0 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
10be0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
10bf0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10c00 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
10c10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
10c20 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d  .      if( (pOp-
10c30 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d  >opcode==OP_Eq)=
10c40 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20  =res2 ) break;. 
10c50 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75     }.    memAbou
10c60 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10c70 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
10c80 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10c90 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
10ca0 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20  >u.i = res2;.   
10cb0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10cc0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
10cd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
10ce0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
10cf0 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
10d00 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
10d10 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
10d20 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  2 ){.      goto 
10d30 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
10d40 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
10d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73  ../* Opcode: Els
10d60 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20  eNotEq * P2 * * 
10d70 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
10d80 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61  ode must immedia
10d90 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f  tely follow an O
10da0 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f  P_Lt or OP_Gt co
10db0 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
10dc0 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74 20  r..** If result 
10dd0 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
10de0 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61  arison on the sa
10df0 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a  me two operands.
10e00 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
10e10 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28   NULL or false (
10e20 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a 75  0), then then ju
10e30 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
10e40 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
10e50 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10e60 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72  on on the two pr
10e70 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a  evious operands.
10e80 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
10e90 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68 65  en true (1), the
10ea0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  n fall through..
10eb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e  */.case OP_ElseN
10ec0 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a  otEq: {       /*
10ed0 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43 41   same as TK_ESCA
10ee0 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73  PE, jump */.  as
10ef0 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
10f00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
10f10 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74  1].opcode==OP_Lt
10f20 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f   || pOp[-1].opco
10f30 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61  de==OP_Gt );.  a
10f40 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
10f50 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
10f60 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  P2 );.  VdbeBran
10f70 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65  chTaken(iCompare
10f80 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 69  !=0, 2);.  if( i
10f90 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f 74  Compare!=0 ) got
10fa0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
10fb0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
10fc0 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
10fd0 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
10fe0 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
10ff0 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
11000 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
11010 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e 65  erator in the ne
11020 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  xt.** instructio
11030 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
11040 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
11050 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2e   the P4 operand.
11060 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
11070 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
11080 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
11090 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
110a0 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
110b0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
110c0 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
110d0 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
110e0 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
110f0 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
11100 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
11110 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
11120 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  **.** The first 
11130 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 50  integer in the P
11140 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79 20  4 integer array 
11150 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  is the length of
11160 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e   the array.** an
11170 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d  d does not becom
11180 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 65  e part of the pe
11190 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  rmutation..*/.ca
111a0 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
111b0 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
111c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
111d0 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
111e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
111f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11200 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  [1].opcode==OP_C
11210 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73 65  ompare );.  asse
11220 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20  rt( pOp[1].p5 & 
11230 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 29  OPFLAG_PERMUTE )
11240 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
11250 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
11260 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
11270 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11280 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
11290 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
112a0 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
112b0 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
112c0 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
112d0 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
112e0 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
112f0 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
11300 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
11310 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
11320 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
11330 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
11340 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
11350 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
11360 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
11370 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11380 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
11390 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
113a0 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
113b0 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
113c0 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
113d0 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
113e0 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
113f0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
11400 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
11410 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
11420 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
11430 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
11440 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
11450 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
11460 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
11470 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
11480 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
11490 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
114a0 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
114b0 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
114c0 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
114d0 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
114e0 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
114f0 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
11500 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
11510 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
11520 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
11530 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
11540 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
11550 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
11560 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
11570 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
11580 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
11590 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
115a0 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
115b0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
115c0 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
115d0 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
115e0 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
115f0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
11600 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
11610 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
11620 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11630 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
11640 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
11650 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
11660 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
11670 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
11680 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  er */.  int *aPe
11690 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54 68  rmute;     /* Th
116a0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
116b0 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35  ..  if( (pOp->p5
116c0 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54   & OPFLAG_PERMUT
116d0 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50 65  E)==0 ){.    aPe
116e0 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c  rmute = 0;.  }el
116f0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
11700 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
11710 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
11720 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74  pcode==OP_Permut
11730 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73  ation );.    ass
11740 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
11750 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
11760 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74 65   );.    aPermute
11770 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69   = pOp[-1].p4.ai
11780 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   + 1;.    assert
11790 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29 3b  ( aPermute!=0 );
117a0 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  .  }.  n = pOp->
117b0 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
117c0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
117d0 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
117e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
117f0 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
11800 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
11810 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
11820 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
11830 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
11840 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
11850 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
11860 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
11870 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
11880 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
11890 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
118a0 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
118b0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
118c0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
118d0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
118e0 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
118f0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11900 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
11910 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11920 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p1+n<=(p->nMe
11930 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11940 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
11950 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
11960 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11970 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11980 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
11990 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
119a0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
119b0 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
119c0 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
119d0 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
119e0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
119f0 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
11a00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
11a10 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
11a20 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
11a30 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
11a40 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
11a50 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
11a60 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
11a70 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
11a80 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
11a90 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65  KeyInfo->nKeyFie
11aa0 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
11ab0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
11ac0 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
11ad0 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
11ae0 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
11af0 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
11b00 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
11b10 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
11b20 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
11b30 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
11b40 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
11b50 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
11b60 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
11b70 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
11b80 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11b90 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
11ba0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
11bb0 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
11bc0 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
11bd0 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
11be0 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
11bf0 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
11c00 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
11c10 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
11c20 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
11c30 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
11c40 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
11c50 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
11c60 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
11c70 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
11c80 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
11c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11ca0 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
11cb0 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64 62  are<0 ){.    Vdb
11cc0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 34  eBranchTaken(0,4
11cd0 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11ce0 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p1 - 1];.  }e
11cf0 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
11d00 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  ==0 ){.    VdbeB
11d10 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34 29 3b  ranchTaken(1,4);
11d20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
11d30 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73  >p2 - 1];.  }els
11d40 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
11d50 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70 4f 70  hTaken(2,4); pOp
11d60 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20   = &aOp[pOp->p3 
11d70 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  - 1];.  }.  brea
11d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11d90 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20   And P1 P2 P3 * 
11da0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11db0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72  [P3]=(r[P1] && r
11dc0 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
11dd0 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
11de0 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
11df0 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
11e00 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
11e10 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
11e20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
11e30 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
11e40 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
11e50 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
11e60 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
11e70 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
11e80 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
11e90 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
11ea0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
11eb0 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
11ec0 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
11ed0 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
11ee0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11ef0 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72  [P3]=(r[P1] || r
11f00 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
11f10 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
11f20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
11f30 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
11f40 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
11f50 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
11f60 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11f70 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11f80 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
11f90 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
11fa0 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
11fb0 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
11fc0 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
11fd0 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
11fe0 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
11ff0 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
12000 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
12010 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
12020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12030 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
12040 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
12050 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
12060 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12070 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
12080 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
12090 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
120a0 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
120b0 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
120c0 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
120d0 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
120e0 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
120f0 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
12100 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
12110 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
12120 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
12130 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
12140 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b  em[pOp->p1], 2);
12150 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56  .  v2 = sqlite3V
12160 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
12170 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20  &aMem[pOp->p2], 
12180 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  2);.  if( pOp->o
12190 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
121a0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
121b0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
121c0 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
121d0 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
121e0 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
121f0 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
12200 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
12210 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
12220 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
12230 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
12240 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
12250 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
12260 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
12270 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
12280 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12290 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
122a0 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
122b0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
122c0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
122d0 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
122e0 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
122f0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
12300 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
12310 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12320 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31 20 50  ode: IsTrue P1 P
12330 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
12340 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d 20 63  opsis: r[P2] = c
12350 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d 3d 54  oalesce(r[P1]==T
12360 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a 2a 0a  RUE,P3) ^ P4.**.
12370 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
12380 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 49 53  mplements the IS
12390 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53 45 2c   TRUE, IS FALSE,
123a0 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20 61 6e   IS NOT TRUE, an
123b0 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41 4c 53  d.** IS NOT FALS
123c0 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a  E operators..**.
123d0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
123e0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
123f0 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
12400 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
12410 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e   that.** boolean
12420 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e 20 72   (a 0 or 1) in r
12430 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f 72 20  egister P2.  Or 
12440 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
12450 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
12460 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ** NULL, then th
12470 65 20 50 33 20 69 73 20 73 74 6f 72 65 64 20 69  e P3 is stored i
12480 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
12490 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73 77 65  Invert the answe
124a0 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20 31 2e  r if P4.** is 1.
124b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67 69 63  .**.** The logic
124c0 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64 20 6c   is summarized l
124d0 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
124e0 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66  <ul> .** <li> If
124f0 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 30   P3==0 and P4==0
12500 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
12510 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45 0a 2a   r[P1] IS TRUE.*
12520 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20  * <li> If P3==1 
12530 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e 20  and P4==1  then 
12540 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20   r[P2] := r[P1] 
12550 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e  IS FALSE.** <li>
12560 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34   If P3==0 and P4
12570 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==1  then  r[P2]
12580 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54   := r[P1] IS NOT
12590 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66   TRUE.** <li> If
125a0 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 30   P3==1 and P4==0
125b0 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
125c0 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 46 41   r[P1] IS NOT FA
125d0 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a  LSE.** </ul>.*/.
125e0 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65 3a 20  case OP_IsTrue: 
125f0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
12600 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  /* in1, out2 */.
12610 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12620 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
12630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
12640 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.i==0 || pOp
12650 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20 20 61  ->p4.i==1 );.  a
12660 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
12670 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20  0 || pOp->p3==1 
12680 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
12690 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
126a0 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20 20 20  m[pOp->p2],.    
126b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f    sqlite3VdbeBoo
126c0 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
126d0 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70  pOp->p1], pOp->p
126e0 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69 29 3b  3) ^ pOp->p4.i);
126f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12700 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
12710 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
12720 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
12730 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
12740 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
12750 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
12760 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
12770 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
12780 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
12790 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
127a0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
127b0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
127c0 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
127d0 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
127e0 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
127f0 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
12800 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12810 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
12820 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
12830 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12840 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
12850 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
12860 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12870 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
12880 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12890 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
128a0 20 21 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f   !sqlite3VdbeBoo
128b0 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31 2c 30  leanValue(pIn1,0
128c0 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ));.  }else{.   
128d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
128e0 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
128f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12900 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
12910 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12920 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20  ynopsis: r[P2]= 
12930 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  ~r[P1].**.** Int
12940 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65  erpret the conte
12950 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
12960 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  1 as an integer.
12970 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f    Store the.** o
12980 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f  nes-complement o
12990 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
129a0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
129b0 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a    If P1 holds.**
129c0 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f   a NULL then sto
129d0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e  re a NULL in P2.
129e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e  .*/.case OP_BitN
129f0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12a00 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
12a10 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  BITNOT, in1, out
12a20 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12a30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12a40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12a50 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
12a60 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
12a70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
12a80 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12a90 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
12aa0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
12ab0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
12ac0 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64  u.i = ~sqlite3Vd
12ad0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
12ae0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12af0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63  ../* Opcode: Onc
12b00 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
12b10 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
12b20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
12b30 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66 69 72  truction the fir
12b40 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f 70 63  st time this opc
12b50 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e  ode is.** encoun
12b60 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20 69 6e  tered on each in
12b70 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  vocation of the 
12b80 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67 72 61  byte-code progra
12b90 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a  m.  Jump to P2.*
12ba0 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * on the second 
12bb0 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
12bc0 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 64 75  nt encounters du
12bd0 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e  ring the same in
12be0 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  vocation..**.** 
12bf0 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61  Top-level progra
12c00 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66 69 72  ms determine fir
12c10 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79  st invocation by
12c20 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65 20 50   comparing the P
12c30 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61 67 61  1.** operand aga
12c40 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70 65 72  inst the P1 oper
12c50 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e  and on the OP_In
12c60 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74 68 65  it opcode at the
12c70 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66   beginning.** of
12c80 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
12c90 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 73 20  f the P1 values 
12ca0 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66 61 6c  differ, then fal
12cb0 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6d 61  l through and ma
12cc0 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f 66 20  ke.** the P1 of 
12cd0 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71 75 61  this opcode equa
12ce0 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66 20 4f  l to the P1 of O
12cf0 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31 20 76  P_Init.  If P1 v
12d00 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74 68 65  alues are.** the
12d10 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b 65 20   same then take 
12d20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20  the jump..**.** 
12d30 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d 73 2c  For subprograms,
12d40 20 74 68 65 72 65 20 69 73 20 61 20 62 69 74 6d   there is a bitm
12d50 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62 65 46  ask in the VdbeF
12d60 72 61 6d 65 20 74 68 61 74 20 64 65 74 65 72 6d  rame that determ
12d70 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65 72 20  ines.** whether 
12d80 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
12d90 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e  should be taken.
12da0 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20 69 73    The bitmask is
12db0 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20 62 65   necessary.** be
12dc0 63 61 75 73 65 20 74 68 65 20 73 65 6c 66 2d 61  cause the self-a
12dd0 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74 72 69  ltering code tri
12de0 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  ck does not work
12df0 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 0a 2a   for recursive.*
12e00 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63  * triggers..*/.c
12e10 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
12e20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12e30 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41 64 64  mp */.  u32 iAdd
12e40 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
12e50 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
12e60 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
12e70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
12e80 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d  >aOp[0].opcode==
12e90 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69 66 28  OP_Init );.  if(
12ea0 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
12eb0 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74 29 28    iAddr = (int)(
12ec0 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20  pOp - p->aOp);. 
12ed0 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72 61 6d     if( (p->pFram
12ee0 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38  e->aOnce[iAddr/8
12ef0 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72 20 26  ] & (1<<(iAddr &
12f00 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20   7)))!=0 ){.    
12f10 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12f20 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
12f30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12f40 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72      }.    p->pFr
12f50 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
12f60 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72  /8] |= 1<<(iAddr
12f70 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a   & 7);.  }else{.
12f80 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30      if( p->aOp[0
12f90 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b  ].p1==pOp->p1 ){
12fa0 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
12fb0 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20  hTaken(1, 2);.  
12fc0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12fd0 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
12fe0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12ff0 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70  (0, 2);.  pOp->p
13000 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  1 = p->aOp[0].p1
13010 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13020 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
13030 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
13040 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
13050 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13060 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
13070 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
13080 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
13090 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
130a0 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
130b0 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
130c0 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
130d0 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
130e0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
130f0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
13100 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
13110 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
13120 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
13130 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 73    int c;.  c = s
13140 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
13150 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
13160 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b  ->p1], pOp->p3);
13170 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13180 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
13190 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70  f( c ) goto jump
131a0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
131b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
131c0 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
131d0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
131e0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
131f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
13200 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
13210 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
13220 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
13230 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
13240 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
13250 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
13260 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
13270 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
13280 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
13290 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
132a0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
132b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
132c0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
132d0 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21 73 71  int c;.  c = !sq
132e0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
132f0 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
13300 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33 29 3b  >p1], !pOp->p3);
13310 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13320 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
13330 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70  f( c ) goto jump
13340 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
13350 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13360 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
13370 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
13380 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
13390 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
133a0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
133b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
133c0 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
133d0 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
133e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
133f0 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
13400 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
13410 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13420 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
13430 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
13440 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
13450 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
13460 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
13470 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
13480 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
13490 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
134a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
134b0 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
134c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
134d0 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
134e0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
134f0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
13500 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13510 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
13520 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
13530 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
13540 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
13550 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
13560 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
13570 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13580 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
13590 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
135a0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
135b0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
135c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
135d0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
135e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
135f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13600 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75  ./* Opcode: IfNu
13610 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33 20 2a  llRow P1 P2 P3 *
13620 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
13630 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68  if P1.nullRow th
13640 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67  en r[P3]=NULL, g
13650 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65  oto P2.**.** Che
13660 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ck the cursor P1
13670 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 69 73   to see if it is
13680 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
13690 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f  ing at a NULL ro
136a0 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20  w..** If it is, 
136b0 74 68 65 6e 20 73 65 74 20 72 65 67 69 73 74 65  then set registe
136c0 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64  r P3 to NULL and
136d0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
136e0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
136f0 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55  1 is not on a NU
13700 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c  LL row, then fal
13710 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68 6f 75  l through withou
13720 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20  t making any.** 
13730 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65  changes..*/.case
13740 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b   OP_IfNullRow: {
13750 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
13760 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
13770 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
13780 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
13790 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
137a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
137b0 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
137c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c  sr[pOp->p1]->nul
137d0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
137e0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
137f0 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  l(aMem + pOp->p3
13800 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
13810 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13820 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
13830 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
13840 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20  SET_SQL_FUNC./* 
13850 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 20 50  Opcode: Offset P
13860 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
13870 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d  ynopsis: r[P3] =
13880 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 50   sqlite_offset(P
13890 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  1).**.** Store i
138a0 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50 33 5d  n register r[P3]
138b0 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65 74   the byte offset
138c0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
138d0 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73 20  se file that is 
138e0 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20  the.** start of 
138f0 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f 72 20  the payload for 
13900 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
13910 69 63 68 20 74 68 61 74 20 63 75 72 73 6f 72 20  ich that cursor 
13920 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a  P1 is currently.
13930 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ** pointing..**.
13940 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63 6f 6c  ** P2 is the col
13950 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
13960 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  he argument to t
13970 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  he sqlite_offset
13980 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20  () function..** 
13990 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
139a0 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74 73 65   not use P2 itse
139b0 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32 20 76  lf, but the P2 v
139c0 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
139d0 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65  the.** code gene
139e0 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31 2c 20  rator.  The P1, 
139f0 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65 72 61  P2, and P3 opera
13a00 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70 63 6f  nds to this opco
13a10 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20 73 61  de are the.** sa
13a20 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43 6f 6c  me as for OP_Col
13a30 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  umn..**.** This 
13a40 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 61  opcode is only a
13a50 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51 4c 69  vailable if SQLi
13a60 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
13a70 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53 51 4c  ith the.** -DSQL
13a80 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45  ITE_ENABLE_OFFSE
13a90 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74 69 6f  T_SQL_FUNC optio
13aa0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66  n..*/.case OP_Of
13ab0 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fset: {         
13ac0 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20 56 64   /* out3 */.  Vd
13ad0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
13ae0 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
13af0 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  sor */.  assert(
13b00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13b10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
13b20 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
13b30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
13b40 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
13b50 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
13b60 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20 7c 7c   NEVER(pC==0) ||
13b70 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13b80 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
13b90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13ba0 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
13bb0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
13bc0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
13bd0 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c 69 74  nt64(pOut, sqlit
13be0 65 33 42 74 72 65 65 4f 66 66 73 65 74 28 70 43  e3BtreeOffset(pC
13bf0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29 3b 0a  ->uc.pCursor));.
13c00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
13c10 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
13c20 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
13c30 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70  L_FUNC */../* Op
13c40 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
13c50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
13c60 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50  ynopsis: r[P3]=P
13c70 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
13c80 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
13c90 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
13ca0 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
13cb0 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
13cc0 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
13cd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
13ce0 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
13cf0 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
13d00 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
13d10 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
13d20 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
13d30 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
13d40 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
13d50 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
13d60 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
13d70 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
13d80 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
13d90 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
13da0 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
13db0 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
13dc0 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
13dd0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
13de0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
13df0 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
13e00 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
13e10 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
13e20 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
13e30 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
13e40 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
13e50 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
13e60 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
13e70 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
13e80 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
13e90 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
13ea0 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
13eb0 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
13ec0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
13ed0 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
13ee0 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
13ef0 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
13f00 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
13f10 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
13f20 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
13f30 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
13f40 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
13f50 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
13f60 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
13f70 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
13f80 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
13f90 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
13fa0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
13fb0 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
13fc0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13fd0 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
13fe0 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 then.** the 
13ff0 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
14000 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
14010 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
14020 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
14030 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
14040 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
14050 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
14060 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
14070 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
14080 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
14090 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
140a0 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
140b0 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
140c0 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
140d0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
140e0 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
140f0 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
14100 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
14110 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
14120 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
14130 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
14140 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
14150 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
14160 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
14170 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
14180 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
14190 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
141a0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
141b0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
141c0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
141d0 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
141e0 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
141f0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
14200 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14220 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
14230 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
14240 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
14250 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
14260 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
14270 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
14280 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
14290 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
142a0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
142b0 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
142c0 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
142d0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
142e0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
142f0 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
14300 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
14310 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
14320 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
14330 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
14340 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
14350 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
14360 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66  ader */.  u64 of
14370 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20  fset64;      /* 
14380 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f  64-bit offset */
14390 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
143a0 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
143b0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
143c0 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
143d0 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
143e0 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
143f0 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
14400 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
14410 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
14420 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
14430 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
14440 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
14450 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74 20 69  le (meaning it i
14460 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
14470 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68  point at.  ** th
14480 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29 20 74  e correct row) t
14490 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75 70 2d  hen bring it up-
144a0 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69 6e 67  to-date by doing
144b0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 0a   the necessary .
144c0 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65 65 6b    ** B-Tree seek
144d0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
144e0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
144f0 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
14500 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
14510 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14520 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
14530 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14540 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
14550 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
14560 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
14570 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
14580 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
14590 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
145a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
145b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
145c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
145d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
145e0 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
145f0 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
14600 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
14610 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
14620 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
14630 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
14640 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
14650 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
14660 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
14670 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
14680 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
14690 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
146a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
146b0 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146d0 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
146e0 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
146f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
14700 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
14710 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
14720 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
14730 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70 65 63   /* For the spec
14740 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73 20 70  ial case of as p
14750 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68  seudo-cursor, th
14760 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66 69 65  e seekResult fie
14770 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 64  ld.        ** id
14780 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 65 67  entifies the reg
14790 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
147a0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
147b0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
147c0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e 30 20  C->seekResult>0 
147d0 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
147e0 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b  = &aMem[pC->seek
147f0 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20  Result];.       
14800 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
14810 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
14820 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
14830 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
14840 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eg) );.        p
14850 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
14860 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65   pC->szRow = pRe
14870 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
14880 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
14890 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
148a0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
148b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
148c0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
148d0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
148e0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
148f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
14900 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
14910 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
14920 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14930 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
14940 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
14950 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
14960 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
14970 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
14980 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
14990 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
149a0 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
149b0 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
149c0 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
149d0 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
149e0 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
149f0 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77  Crsr, &pC->szRow
14a00 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14a10 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e   pC->szRow<=pC->
14a20 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20  payloadSize );. 
14a30 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14a40 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b  >szRow<=65536 );
14a50 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
14a60 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
14a70 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
14a80 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
14a90 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
14aa0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
14ab0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
14ac0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
14ad0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
14ae0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
14af0 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
14b00 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
14b10 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
14b20 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73 65 74  C->aRow, aOffset
14b30 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  [0]);.    pC->nH
14b40 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a  drParsed = 0;...
14b50 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f      if( pC->szRo
14b60 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20  w<aOffset[0] ){ 
14b70 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54       /*OPTIMIZAT
14b80 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
14b90 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
14ba0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
14bb0 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
14bc0 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
14bd0 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
14be0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
14bf0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
14c00 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
14c10 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
14c20 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
14c30 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
14c40 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
14c50 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
14c60 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
14c70 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
14c80 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
14c90 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
14ca0 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
14cb0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
14cc0 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
14cd0 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
14ce0 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
14cf0 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
14d00 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
14d10 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20       ** Do this 
14d20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
14d30 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
14d40 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
14d50 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79    **.      ** Ty
14d60 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
14d70 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
14d80 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
14d90 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
14da0 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75        ** types u
14db0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
14dc0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
14dd0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
14de0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
14df0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
14e00 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
14e10 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
14e20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
14e30 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33  rom a.      ** 3
14e40 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
14e50 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
14e60 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
14e70 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
14e80 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79       ** extra by
14e90 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
14ea0 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
14eb0 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
14ec0 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f   98307..      */
14ed0 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73  .      if( aOffs
14ee0 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c  et[0] > 98307 ||
14ef0 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20 70 43   aOffset[0] > pC
14f00 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
14f10 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
14f20 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
14f30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
14f40 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  se{.      /* Thi
14f50 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
14f60 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70 70 69  tion.  By skippi
14f70 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69 72 73  ng over the firs
14f80 74 20 66 65 77 20 74 65 73 74 73 0a 20 20 20 20  t few tests.    
14f90 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48    ** (ex: pC->nH
14fa0 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20 69 6e  drParsed<=p2) in
14fb0 20 74 68 65 20 6e 65 78 74 20 73 65 63 74 69 6f   the next sectio
14fc0 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20 61 0a  n, we achieve a.
14fd0 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75 72 61        ** measura
14fe0 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ble performance 
14ff0 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  gain..      **. 
15000 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62 72 61       ** This bra
15010 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65 76 65  nch is taken eve
15020 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d  n if aOffset[0]=
15030 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65 63 6f  =0.  Such a reco
15040 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20 20 20  rd is never.    
15050 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 62    ** generated b
15060 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f  y SQLite, and co
15070 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72 65  uld be considere
15080 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75  d corruption, bu
15090 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20 61 63  t we.      ** ac
150a0 63 65 70 74 20 69 74 20 66 6f 72 20 68 69 73 74  cept it for hist
150b0 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20  orical reasons. 
150c0 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d   When aOffset[0]
150d0 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20 74 68  ==0, the code th
150e0 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72 61 6e  is.      ** bran
150f0 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65 61 64  ch jumps to read
15100 73 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  s past the end o
15110 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 62 75  f the record, bu
15120 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20 20 20  t never more.   
15130 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66 65 77     ** than a few
15140 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20 69 66   bytes.  Even if
15150 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63 63 75   the record occu
15160 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
15170 20 74 68 65 20 70 61 67 65 0a 20 20 20 20 20 20   the page.      
15180 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c  ** content area,
15190 20 74 68 65 20 22 70 61 67 65 20 68 65 61 64 65   the "page heade
151a0 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72 20 74  r" comes after t
151b0 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 20  he page content 
151c0 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20  and so.      ** 
151d0 74 68 69 73 20 6f 76 65 72 72 65 61 64 20 69 73  this overread is
151e0 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69   harmless.  Simi
151f0 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20 63 61  lar overreads ca
15200 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20 63 6f  n occur for a co
15210 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a 20 64  rrupt.      ** d
15220 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
15230 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61      */.      zDa
15240 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20  ta = pC->aRow;. 
15250 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
15260 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
15270 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  );         /* Co
15280 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65  nditional skippe
15290 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63  d */.      testc
152a0 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d  ase( aOffset[0]=
152b0 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
152c0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
152d0 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20  header;.    }.  
152e0 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
152f0 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
15300 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
15310 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
15320 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
15330 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
15340 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
15350 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
15360 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  pC->aType[]..  *
15370 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
15380 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
15390 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
153a0 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
153b0 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
153c0 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
153d0 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
153e0 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
153f0 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
15400 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
15410 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
15420 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
15430 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
15440 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
15450 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
15460 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
15470 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
15480 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
15490 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
154a0 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
154b0 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
154c0 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
154d0 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
154e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
154f0 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63  FromBtree(pC->uc
15500 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66  .pCursor, 0, aOf
15510 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b  fset[0], &sMem);
15520 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
15530 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15540 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15550 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44  rror;.        zD
15560 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
15570 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
15580 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
15590 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
155a0 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
155b0 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b  ll in pC->aType[
155c0 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
155d0 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
155e0 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
155f0 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75  . */.    op_colu
15600 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
15610 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
15620 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
15630 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73  offset64 = aOffs
15640 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
15650 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
15660 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
15670 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
15680 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
15690 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
156a0 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b  zHdr>=zEndHdr );
156b0 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
156c0 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72     if( (t = zHdr
156d0 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20  [0])<0x80 ){.   
156e0 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
156f0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
15700 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
15710 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70  OneByteSerialTyp
15720 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
15730 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
15740 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
15750 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
15760 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
15770 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
15780 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15790 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
157a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d     }.        pC-
157b0 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b  >aType[i++] = t;
157c0 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
157d0 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73  [i] = (u32)(offs
157e0 65 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66  et64 & 0xfffffff
157f0 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  f);.      }while
15800 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
15810 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20  zEndHdr );..    
15820 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
15830 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  is corrupt if an
15840 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
15850 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20  ng are true:.   
15860 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79     ** (1) the by
15870 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  tes of the heade
15880 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68  r extend past th
15890 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64 65  e declared heade
158a0 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20  r size.      ** 
158b0 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20 68  (2) the entire h
158c0 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20 62  eader was used b
158d0 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20  ut not all data 
158e0 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a  was used.      *
158f0 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
15900 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
15910 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
15920 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
15930 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
15940 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
15950 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
15960 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d  dr || offset64!=
15970 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
15980 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
15990 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c  set64 > pC->payl
159a0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
159b0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
159c0 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20  ffset[0]==0 ){. 
159d0 20 20 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a           i = 0;.
159e0 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d            zHdr =
159f0 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20   zEndHdr;.      
15a00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15a10 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
15a20 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  =0 ) sqlite3Vdbe
15a30 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
15a40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
15a50 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  o op_column_corr
15a60 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  upt;.        }. 
15a70 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43       }..      pC
15a80 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
15a90 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
15aa0 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
15ab0 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
15ac0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
15ad0 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
15ae0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
15af0 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
15b00 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20       t = 0;.    
15b10 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
15b20 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
15b30 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73  ract new entries
15b40 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
15b50 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
15b60 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
15b70 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
15b80 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
15b90 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
15ba0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
15bb0 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
15bc0 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
15bd0 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
15be0 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
15bf0 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
15c00 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
15c10 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
15c20 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
15c30 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
15c40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15c50 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
15c60 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
15c70 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
15c80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15c90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15ca0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15cb0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
15cc0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
15cd0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
15ce0 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  .    t = pC->aTy
15cf0 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  pe[p2];.  }..  /
15d00 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
15d10 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
15d20 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
15d30 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
15d40 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
15d50 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
15d60 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
15d70 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
15d80 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
15d90 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
15da0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
15db0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
15dc0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
15dd0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
15de0 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
15df0 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
15e00 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
15e10 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
15e20 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73  (pDest) ){.    s
15e30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15e40 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d  Null(pDest);.  }
15e50 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
15e60 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
15e70 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
15e80 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
15e90 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
15ea0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
15eb0 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
15ec0 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
15ed0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
15ee0 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
15ef0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
15f00 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
15f10 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
15f20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
15f30 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b  w + aOffset[p2];
15f40 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b  .    if( t<12 ){
15f50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
15f60 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
15f70 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
15f80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
15f90 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
15fa0 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
15fb0 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65 72  g, we need a per
15fc0 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e  sistent value, n
15fd0 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45  ot.      ** a ME
15fe0 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20  M_Ephem value.  
15ff0 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 61  This branch is a
16000 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20   fast short-cut 
16010 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c 65  that is equivale
16020 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63  nt.      ** to c
16030 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64  alling sqlite3Vd
16040 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e  beSerialGet() an
16050 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 65  d sqlite3VdbeDee
16060 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20  phemeralize().. 
16070 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
16080 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61  atic const u16 a
16090 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42  Flag[] = { MEM_B
160a0 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  lob, MEM_Str|MEM
160b0 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70  _Term };.      p
160c0 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20  Dest->n = len = 
160d0 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20  (t-12)/2;.      
160e0 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
160f0 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28  oding;.      if(
16100 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
16110 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
16120 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16130 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
16140 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
16150 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
16160 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
16170 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
16180 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16190 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
161a0 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
161b0 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
161c0 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
161d0 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
161e0 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
161f0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
16200 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
16210 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
16220 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
16230 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
16240 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
16250 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68  oding;.    /* Th
16260 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
16270 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
16280 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
16290 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
162a0 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
162b0 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
162c0 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
162d0 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
162e0 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
162f0 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
16300 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
16310 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
16320 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
16330 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
16340 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
16350 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
16360 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
16370 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
16380 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
16390 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
163a0 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
163b0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
163c0 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
163d0 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
163e0 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
163f0 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
16400 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
16410 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
16420 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
16430 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
16440 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
16450 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
16460 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20  isk. .      **. 
16470 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68       ** Although
16480 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16490 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65 61 64  alGet() may read
164a0 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73   at most 8 bytes
164b0 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20   from the.      
164c0 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73 65 64  ** buffer passed
164d0 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e   to it, debuggin
164e0 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d  g function VdbeM
164f0 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 29 20  emPrettyPrint() 
16500 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61  may.      ** rea
16510 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31  d up to 16. So 1
16520 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73  6 bytes of bogus
16530 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70   content is supp
16540 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  lied..      */. 
16550 20 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61       static u8 a
16560 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68  Zero[16];  /* Th
16570 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73 20  is is the bogus 
16580 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20  content */.     
16590 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
165a0 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20  alGet(aZero, t, 
165b0 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
165c0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
165d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
165e0 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
165f0 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  rsor, aOffset[p2
16600 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a  ], len, pDest);.
16610 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16620 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16630 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16640 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  r;.      sqlite3
16650 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63  VdbeSerialGet((c
16660 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e  onst u8*)pDest->
16670 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  z, t, pDest);.  
16680 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16690 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a   &= ~MEM_Ephem;.
166a0 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f      }.  }..op_co
166b0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
166c0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
166d0 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
166e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
166f0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
16700 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  k;..op_column_co
16710 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70  rrupt:.  if( aOp
16720 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20  [0].p3>0 ){.    
16730 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30  pOp = &aOp[aOp[0
16740 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65  ].p3-1];.    bre
16750 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ak;.  }else{.   
16760 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
16770 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67  RUPT_BKPT;.    g
16780 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16790 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f  _error;.  }.}../
167a0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
167b0 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
167c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
167d0 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
167e0 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
167f0 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
16800 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
16810 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
16820 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
16830 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
16840 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
16850 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68  ong. The N-th ch
16860 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
16870 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
16880 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
16890 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
168a0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
168b0 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72  he N-th.** memor
168c0 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
168d0 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
168e0 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
168f0 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
16900 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
16910 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
16920 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  lied */..  zAffi
16930 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
16940 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
16950 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
16960 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
16970 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
16980 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
16990 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
169a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
169b0 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
169c0 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
169d0 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
169e0 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
169f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
16a00 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
16a10 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
16a20 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69  (pIn1, *(zAffini
16a30 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
16a40 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
16a50 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
16a60 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b  y[0] );.  break;
16a70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
16a80 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
16a90 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
16aa0 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
16ab0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
16ac0 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
16ad0 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
16ae0 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
16af0 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
16b00 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
16b10 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
16b20 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
16b30 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
16b40 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
16b50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
16b60 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
16b70 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
16b80 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
16b90 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16ba0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16bb0 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61    The N-th chara
16bc0 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
16bd0 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
16be0 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
16bf0 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
16c00 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
16c10 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66  N-th.** field of
16c20 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
16c30 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
16c40 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
16c50 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
16c60 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
16c70 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
16c80 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
16c90 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
16ca0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
16cb0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
16cc0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
16cd0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
16ce0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
16cf0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
16d00 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
16d10 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
16d20 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
16d30 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
16d40 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16d60 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16d70 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16d90 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16da0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
16db0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
16dc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16dd0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
16de0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
16df0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
16e00 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16e10 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16e20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16e30 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16e40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e50 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16e60 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16e70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16e80 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
16e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16ea0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
16eb0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
16ec0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
16ed0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
16ee0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
16ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
16f00 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
16f10 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
16f20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16f30 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
16f40 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16f50 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16f60 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
16f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16f80 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
16f90 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
16fa0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
16fb0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
16fc0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
16fd0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
16fe0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
16ff0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
17000 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
17010 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
17020 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
17030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
17040 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
17050 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
17060 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
17070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17080 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
17090 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
170a0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
170c0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
170d0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
170e0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
170f0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
17100 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
17110 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
17120 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
17130 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
17140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
17180 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
17190 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
171a0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
171b0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
171c0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
171d0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
171e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
17220 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
17230 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
17240 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
17250 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
17260 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
17270 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
17280 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
17290 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
172a0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
172b0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
172c0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
172d0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
172e0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
172f0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
17300 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
17310 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
17320 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
17330 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
17340 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
17350 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
17360 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
17370 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
17380 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
17390 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
173a0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
173b0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
173c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
173d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
173e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
173f0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
17400 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
17410 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
17420 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
17430 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
17440 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
17450 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
17460 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
17470 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
17480 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
17490 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
174a0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
174b0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
174c0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
174d0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
174e0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
174f0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
17500 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
17510 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
17520 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
17530 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
17540 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
17550 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
17560 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
17570 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
17580 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
17590 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
175a0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
175b0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
175c0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
175d0 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
175e0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
175f0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
17600 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
17610 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
17620 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
17630 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
17640 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
17650 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
17660 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
17670 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
17680 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
17690 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
176a0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
176b0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
176c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
176d0 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
176e0 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20  .  /* NULLs can 
176f0 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65  be safely trimme
17700 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f  d from the end o
17710 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73  f the record, as
17720 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73   long as.  ** as
17730 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
17740 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20  at is 2 or more 
17750 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and none of the 
17760 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a  omitted columns.
17770 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d    ** have a non-
17780 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
17790 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72  ue.  Also, the r
177a0 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65  ecord must be le
177b0 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20  ft with.  ** at 
177c0 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e  least one field.
177d0 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69    If P5>0 then i
177e0 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f  t will be one mo
177f0 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a  re than the.  **
17800 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69   index of the ri
17810 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  ght-most column 
17820 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  with a non-NULL 
17830 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
17840 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
17850 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c  {.    while( (pL
17860 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ast->flags & MEM
17870 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69  _Null)!=0 && nFi
17880 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  eld>pOp->p5 ){. 
17890 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20       pLast--;.  
178a0 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20      nField--;.  
178b0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
178c0 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
178d0 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
178e0 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
178f0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
17900 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
17910 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
17920 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
17930 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
17940 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
17950 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
17960 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
17970 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72  pRec) );.    ser
17980 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
17990 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
179a0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
179b0 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
179c0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
179d0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
179e0 20 20 20 69 66 28 20 73 65 72 69 61 6c 5f 74 79     if( serial_ty
179f0 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pe==0 ){.       
17a00 20 2f 2a 20 56 61 6c 75 65 73 20 77 69 74 68 20   /* Values with 
17a10 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d  MEM_Null and MEM
17a20 5f 5a 65 72 6f 20 61 72 65 20 63 72 65 61 74 65  _Zero are create
17a30 64 20 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72  d by xColumn vir
17a40 74 75 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  tual.        ** 
17a50 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 74 68  table methods th
17a60 61 74 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20  at never invoke 
17a70 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 78  sqlite3_result_x
17a80 78 78 78 78 28 29 20 77 68 69 6c 65 0a 20 20 20  xxxx() while.   
17a90 20 20 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e       ** computin
17aa0 67 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20  g an unchanging 
17ab0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20  column value in 
17ac0 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
17ad0 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20  ent..        ** 
17ae0 47 69 76 65 20 73 75 63 68 20 76 61 6c 75 65 73  Give such values
17af0 20 61 20 73 70 65 63 69 61 6c 20 69 6e 74 65 72   a special inter
17b00 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72  nal-use-only ser
17b10 69 61 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a 20  ial-type of 10. 
17b20 20 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61         ** so tha
17b30 74 20 74 68 65 79 20 63 61 6e 20 62 65 20 70 61  t they can be pa
17b40 73 73 65 64 20 74 68 72 6f 75 67 68 20 74 6f 20  ssed through to 
17b50 78 55 70 64 61 74 65 20 61 6e 64 20 68 61 76 65  xUpdate and have
17b60 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 74 72  .        ** a tr
17b70 75 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ue sqlite3_value
17b80 5f 6e 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a  _nochange(). */.
17b90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
17ba0 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
17bb0 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20  NOCHNG_MAGIC || 
17bc0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20  CORRUPT_DB );.  
17bd0 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70        serial_typ
17be0 65 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65  e = 10;.      }e
17bf0 6c 73 65 20 69 66 28 20 6e 44 61 74 61 20 29 7b  lse if( nData ){
17c00 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
17c10 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
17c20 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f  dBlob(pRec) ) go
17c30 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
17c40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17c50 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
17c60 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20  .nZero;.        
17c70 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e  len -= pRec->u.n
17c80 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Zero;.      }.  
17c90 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d    }.    nData +=
17ca0 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61   len;.    testca
17cb0 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
17cc0 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74  =127 );.    test
17cd0 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
17ce0 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48  e==128 );.    nH
17cf0 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70  dr += serial_typ
17d00 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c  e<=127 ? 1 : sql
17d10 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
17d20 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
17d30 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65  pRec->uTemp = se
17d40 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20 20 69  rial_type;.    i
17d50 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
17d60 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
17d70 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
17d80 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
17d90 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
17da0 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
17db0 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
17dc0 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
17dd0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
17de0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
17df0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
17e00 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
17e10 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
17e20 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
17e30 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
17e40 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
17e50 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
17e60 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
17e70 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
17e80 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
17e90 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
17ea0 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
17eb0 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
17ec0 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
17ed0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
17ee0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
17ef0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
17f00 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
17f10 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
17f20 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
17f30 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
17f40 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
17f50 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
17f60 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17f70 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
17f80 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
17f90 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  Data;..  /* Make
17fa0 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
17fb0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
17fc0 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
17fd0 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
17fe0 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
17ff0 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
18000 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
18010 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
18020 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
18030 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
18040 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
18050 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
18060 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
18070 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
18080 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
18090 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
180a0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
180b0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
180c0 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70 4f 75  nByte+nZero<=pOu
180d0 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20  t->szMalloc ){. 
180e0 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74     /* The output
180f0 20 72 65 67 69 73 74 65 72 20 69 73 20 61 6c 72   register is alr
18100 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f 75 67  eady large enoug
18110 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  h to hold the re
18120 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e 6f 20  cord..    ** No 
18130 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f 72 20  error checks or 
18140 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65 6d 65  buffer enlargeme
18150 6e 74 20 69 73 20 72 65 71 75 69 72 65 64 20 2a  nt is required *
18160 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  /.    pOut->z = 
18170 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  pOut->zMalloc;. 
18180 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
18190 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  eed to make sure
181a0 20 74 68 61 74 20 74 68 65 20 6f 75 74 70 75 74   that the output
181b0 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69 67 20   is not too big 
181c0 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72 67 65  and then enlarge
181d0 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70  .    ** the outp
181e0 75 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 68  ut register to h
181f0 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72 65 73  old the full res
18200 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ult */.    if( n
18210 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61  Byte+nZero>db->a
18220 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
18230 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
18240 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
18250 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
18260 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
18270 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
18280 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
18290 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
182a0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mem;.    }.  }. 
182b0 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
182c0 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
182d0 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
182e0 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
182f0 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
18300 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
18310 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
18320 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
18330 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
18340 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
18350 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63  rial_type = pRec
18360 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20  ->uTemp;.    /* 
18370 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
18380 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f  6529-47362 Follo
18390 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  wing the size va
183a0 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20  rint are one or 
183b0 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69  more.    ** addi
183c0 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
183d0 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
183e0 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56  */.    i += putV
183f0 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63  arint32(&zNewRec
18400 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74  ord[i], serial_t
18410 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20  ype);           
18420 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20   /* serial type 
18430 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  */.    /* EVIDEN
18440 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35  CE-OF: R-64536-5
18450 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20  1728 The values 
18460 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
18470 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20  in the record.  
18480 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
18490 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64   follow the head
184a0 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20  er. */.    j += 
184b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
184c0 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
184d0 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61  [j], pRec, seria
184e0 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74  l_type); /* cont
184f0 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28  ent */.  }while(
18500 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74   (++pRec)<=pLast
18510 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
18520 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72  =nHdr );.  asser
18530 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( j==nByte );..
18540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
18550 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
18560 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
18570 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
18580 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
18590 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
185a0 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
185b0 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
185c0 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
185d0 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
185e0 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
185f0 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53  ero;.  }.  REGIS
18600 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
18610 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
18620 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
18630 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
18640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
18650 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
18660 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
18670 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
18680 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
18690 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
186a0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
186b0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
186c0 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
186d0 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
186e0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
186f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18700 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
18710 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
18720 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
18730 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
18740 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
18750 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
18760 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
18770 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
18780 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
18790 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
187a0 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
187b0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
187c0 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
187d0 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
187e0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
187f0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
18800 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
18810 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
18820 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
18830 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
18840 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18850 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
18860 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
18870 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
18880 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
18890 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
188a0 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
188b0 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
188c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
188d0 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
188e0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
188f0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
18900 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
18910 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
18920 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
18930 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
18940 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
18950 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
18960 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
18970 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
18980 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
18990 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
189a0 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
189b0 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
189c0 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
189f0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
18a00 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
18a30 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
18a40 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
18a50 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
18a60 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
18a70 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
18a80 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
18a90 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
18aa0 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
18ab0 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
18ac0 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
18ad0 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
18ae0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
18af0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
18b00 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
18b10 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
18b20 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
18b30 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
18b40 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
18b50 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
18b60 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
18b70 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
18b80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
18b90 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
18ba0 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
18bb0 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
18bc0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
18bd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18be0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
18bf0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18c00 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
18c10 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
18c20 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
18c30 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
18c40 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
18c50 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18c60 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
18c70 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
18c80 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
18c90 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
18ca0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
18cb0 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
18cc0 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
18cd0 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
18ce0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
18cf0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
18d00 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
18d10 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
18d20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18d30 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
18d40 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
18d50 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
18d60 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
18d70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18d80 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
18d90 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
18da0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
18db0 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
18dc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
18dd0 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
18de0 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
18df0 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
18e00 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
18e10 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
18e20 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
18e30 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
18e40 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
18e50 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
18e60 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
18e70 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
18e80 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
18e90 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
18ea0 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
18eb0 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
18ec0 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
18ed0 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
18ee0 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
18ef0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
18f00 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18f10 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
18f20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
18f30 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
18f40 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
18f50 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
18f80 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
18f90 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
18fa0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18fb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
18fc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
18fd0 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
18fe0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
18ff0 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
19000 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
19010 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
19020 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
19030 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
19040 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
19050 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
19060 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
19070 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
19080 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
19090 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
190a0 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
190b0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
190c0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
190d0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
190e0 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
190f0 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
19100 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
19110 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
19120 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
19130 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
19140 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
19150 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
19160 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
19170 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
19180 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
19190 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
191a0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
191b0 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
191c0 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
191d0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
191e0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
191f0 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
19200 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
19210 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
19220 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
19230 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
19240 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
19250 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
19260 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
19270 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
19280 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
19290 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
192a0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
192b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
192c0 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
192d0 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
192e0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
192f0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
19300 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
19310 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
19320 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
19330 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
19340 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
19350 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
19360 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
19370 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
19380 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
19390 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
193a0 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
193b0 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
193c0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
193d0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
193e0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
193f0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
19400 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
19410 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
19420 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
19430 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
19440 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
19450 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
19460 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
19470 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
19480 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
19490 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
194a0 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
194b0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
194c0 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
194d0 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
194e0 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
194f0 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
19500 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
19510 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
19520 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
19530 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
19540 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
19550 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
19570 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
19580 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
19590 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
195a0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
195b0 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
195c0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
195d0 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
195e0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
195f0 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
19600 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
19610 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
19620 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
19630 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
19640 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
19650 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
19660 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
19670 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
19680 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
19690 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
196a0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
196b0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
196c0 3e 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20  >bConcurrent==0 
196d0 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
196e0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
196f0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73   );.      if( is
19700 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
19710 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
19720 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
19730 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
19740 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
19750 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
19760 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
19770 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19780 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19790 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
197a0 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
197b0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
197c0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
197d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
197e0 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
197f0 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20   aOp);.         
19800 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
19810 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 0;.          p
19820 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
19830 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
19840 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
19850 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
19860 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
19870 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
19880 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72  t = 0;.        r
19890 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20  c = p->rc;.     
198a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
198b0 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e  int isSchemaChan
198c0 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76  ge;.        iSav
198d0 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
198e0 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
198f0 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
19900 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
19910 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
19920 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
19930 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e  maChange = (db->
19940 6d 44 62 46 6c 61 67 73 20 26 20 44 42 46 4c 41  mDbFlags & DBFLA
19950 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 29 21  G_SchemaChange)!
19960 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  =0;.          fo
19970 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
19980 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
19990 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
199a0 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
199b0 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
199c0 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20  i].pBt,.        
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
199f0 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
19a00 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20  BACK,.          
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53               isS
19a30 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b  chemaChange==0);
19a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
19a50 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
19a60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19a70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
19a80 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
19a90 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
19aa0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
19ab0 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
19ac0 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
19ad0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
19ae0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
19af0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
19b00 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
19b10 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
19b20 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
19b30 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19b40 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
19b50 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19b60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19b70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
19b80 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   }.        if( i
19b90 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b  sSchemaChange ){
19ba0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
19bb0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
19bc0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20 30  Statements(db, 0
19bd0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
19be0 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
19bf0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
19c00 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  db);.          d
19c10 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44  b->mDbFlags |= D
19c20 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
19c30 67 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ge;.        }.  
19c40 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
19c50 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
19c60 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
19c70 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
19c80 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
19c90 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
19ca0 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
19cb0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
19cc0 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
19cd0 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
19ce0 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
19cf0 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
19d00 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
19d10 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
19d20 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
19d30 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
19d40 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
19d50 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
19d60 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
19d70 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
19d80 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
19d90 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
19da0 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
19db0 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
19dc0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
19dd0 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20  perated on .    
19de0 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20    ** too. If it 
19df0 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f  is a ROLLBACK TO
19e00 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e  , then set the n
19e10 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
19e20 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73  d .      ** cons
19e30 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
19e40 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  s present in the
19e50 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
19e60 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20   value stored.  
19e70 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20      ** when the 
19e80 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72  savepoint was cr
19e90 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20  eated.  */.     
19ea0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
19eb0 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
19ec0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53        assert( pS
19ed0 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53  avepoint==db->pS
19ee0 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20  avepoint );.    
19ef0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
19f00 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
19f10 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
19f20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19f30 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , pSavepoint);. 
19f40 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72         if( !isTr
19f50 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
19f60 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
19f70 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20  point--;.       
19f80 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a   }.      }else{.
19f90 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
19fa0 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76  erredCons = pSav
19fb0 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
19fc0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64  dCons;.        d
19fd0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19fe0 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
19ff0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
1a000 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ns;.      }..   
1a010 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
1a020 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56  ction || p1==SAV
1a030 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
1a040 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1a050 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
1a060 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61  oint(db, p1, iSa
1a070 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
1a080 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a090 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1a0a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a0b0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
1a0c0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1a0d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a0e0 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  ror;..  break;.}
1a0f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
1a100 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 50 33  oCommit P1 P2 P3
1a110 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
1a120 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
1a130 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
1a140 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
1a150 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
1a160 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
1a170 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
1a180 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
1a190 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
1a1a0 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
1a1b0 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
1a1c0 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
1a1d0 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
1a1e0 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
1a1f0 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
1a200 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
1a210 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
1a220 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
1a230 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  cache..**.** If 
1a240 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P3 is non-zero, 
1a250 74 68 65 6e 20 74 68 69 73 20 69 6e 73 74 72 75  then this instru
1a260 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
1a270 78 65 63 75 74 65 64 20 61 73 20 70 61 72 74 20  xecuted as part 
1a280 6f 66 0a 2a 2a 20 61 20 22 42 45 47 49 4e 20 43  of.** a "BEGIN C
1a290 4f 4e 43 55 52 52 45 4e 54 22 20 63 6f 6d 6d 61  ONCURRENT" comma
1a2a0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  nd..**.** This i
1a2b0 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
1a2c0 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
1a2d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
1a2e0 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
1a2f0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1a300 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
1a310 61 63 6b 3b 0a 20 20 69 6e 74 20 62 43 6f 6e 63  ack;.  int bConc
1a320 75 72 72 65 6e 74 3b 0a 20 20 69 6e 74 20 68 72  urrent;.  int hr
1a330 63 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74  c;..  desiredAut
1a340 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
1a350 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d  1;.  iRollback =
1a360 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 43 6f 6e   pOp->p2;.  bCon
1a370 63 75 72 72 65 6e 74 20 3d 20 70 4f 70 2d 3e 70  current = pOp->p
1a380 33 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  3;.  assert( des
1a390 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1a3a0 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
1a3b0 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
1a3c0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
1a3d0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
1a3e0 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
1a3f0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
1a400 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  AutoCommit==0 ||
1a410 20 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20   bConcurrent==0 
1a420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1a430 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
1a440 7c 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e  | db->bConcurren
1a450 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
1a460 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
1a470 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65  e>0 );  /* At le
1a480 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20  ast this one VM 
1a490 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61  is active */.  a
1a4a0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1a4b0 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65  der );..  if( de
1a4c0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
1a4d0 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
1a4e0 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
1a4f0 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
1a500 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
1a510 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
1a520 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
1a530 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54  ackAll(db, SQLIT
1a540 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
1a550 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
1a560 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
1a570 20 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65     db->bConcurre
1a580 6e 74 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  nt = 0;.    }els
1a590 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
1a5a0 6f 43 6f 6d 6d 69 74 0a 20 20 20 20 20 20 20 20  oCommit.        
1a5b0 20 20 20 20 26 26 20 28 64 62 2d 3e 6e 56 64 62      && (db->nVdb
1a5c0 65 57 72 69 74 65 3e 30 20 7c 7c 20 28 64 62 2d  eWrite>0 || (db-
1a5d0 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20 26 26 20  >bConcurrent && 
1a5e0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
1a5f0 31 29 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  1)) ){.      /* 
1a600 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  A transaction ma
1a610 79 20 6f 6e 6c 79 20 62 65 20 63 6f 6d 6d 69 74  y only be commit
1a620 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
1a630 20 6e 6f 20 6f 74 68 65 72 20 61 63 74 69 76 65   no other active
1a640 0a 20 20 20 20 20 20 2a 2a 20 77 72 69 74 65 72  .      ** writer
1a650 20 56 4d 73 2e 20 49 66 20 74 68 65 20 74 72 61   VMs. If the tra
1a660 6e 73 61 63 74 69 6f 6e 20 69 73 20 43 4f 4e 43  nsaction is CONC
1a670 55 52 52 45 4e 54 2c 20 74 68 65 6e 20 69 74 20  URRENT, then it 
1a680 6d 61 79 20 6f 6e 6c 79 20 62 65 0a 20 20 20 20  may only be.    
1a690 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64 20 69    ** committed i
1a6a0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 61  f there are no a
1a6b0 63 74 69 76 65 20 56 4d 73 20 61 74 20 61 6c 6c  ctive VMs at all
1a6c0 20 28 72 65 61 64 65 72 73 20 6f 72 20 77 72 69   (readers or wri
1a6d0 74 65 72 73 29 2e 0a 20 20 20 20 20 20 2a 2a 0a  ters)..      **.
1a6e0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
1a6f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1a700 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 74 68 65  a COMMIT and the
1a710 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
1a720 20 6e 6f 74 20 62 65 0a 20 20 20 20 20 20 2a 2a   not be.      **
1a730 20 63 6f 6d 6d 69 74 74 65 64 20 64 75 65 20 74   committed due t
1a740 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6e  o one of the con
1a750 64 69 74 69 6f 6e 73 20 61 62 6f 76 65 2c 20 72  ditions above, r
1a760 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 0a 20  eturn an error. 
1a770 20 20 20 20 20 2a 2a 20 69 6e 64 69 63 61 74 69       ** indicati
1a780 6e 67 20 74 68 61 74 20 6f 74 68 65 72 20 56 4d  ng that other VM
1a790 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
1a7a0 62 65 66 6f 72 65 20 74 68 65 20 43 4f 4d 4d 49  before the COMMI
1a7b0 54 20 63 61 6e 20 0a 20 20 20 20 20 20 2a 2a 20  T can .      ** 
1a7c0 62 65 20 70 72 6f 63 65 73 73 65 64 2e 20 20 2a  be processed.  *
1a7d0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1a7e0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
1a7f0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
1a800 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
1a830 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
1a840 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
1a850 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
1a860 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a870 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1a880 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
1a890 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
1a8a0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
1a8b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1a8c0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1a8d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a8e0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
1a8f0 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
1a900 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
1a910 20 20 68 72 63 20 3d 20 73 71 6c 69 74 65 33 56    hrc = sqlite3V
1a920 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 20 20  dbeHalt(p);.    
1a930 69 66 28 20 28 68 72 63 20 26 20 30 78 46 46 29  if( (hrc & 0xFF)
1a940 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
1a950 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28  .      p->pc = (
1a960 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
1a970 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
1a980 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
1a990 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1a9a0 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  );.      p->rc =
1a9b0 20 68 72 63 3b 0a 20 20 20 20 20 20 72 63 20 3d   hrc;.      rc =
1a9c0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
1a9d0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1a9e0 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
1a9f0 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20  db->bConcurrent 
1aa00 3d 20 28 75 38 29 62 43 6f 6e 63 75 72 72 65 6e  = (u8)bConcurren
1aa10 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  t;.    assert( d
1aa20 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
1aa30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
1aa40 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
1aa50 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
1aa60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1aa70 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1aa80 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
1aa90 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
1aaa0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
1aab0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
1aac0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
1aad0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1aae0 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20  Error(p,.       
1aaf0 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
1ab00 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
1ab10 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
1ab20 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
1ab30 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
1ab40 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
1ab50 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
1ab60 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
1ab70 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ab90 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
1aba0 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1abb0 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
1abc0 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
1abd0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
1abe0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1abf0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
1ac00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ac10 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
1ac20 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
1ac30 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
1ac40 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61  ransaction on da
1ac50 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74  tabase P1 if a t
1ac60 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
1ac70 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74  t already.** act
1ac80 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ive..** If P2 is
1ac90 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
1aca0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
1acb0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20  ion is started, 
1acc0 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64  or if a .** read
1acd0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1ace0 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20  already active, 
1acf0 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74  it is upgraded t
1ad00 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  o a write-transa
1ad10 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20  ction..** If P2 
1ad20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
1ad30 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
1ad40 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a   is started..**.
1ad50 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1ad60 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
1ad70 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
1ad80 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1ad90 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
1ada0 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
1adb0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1adc0 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
1add0 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
1ade0 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
1adf0 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
1ae00 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
1ae10 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
1ae20 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1ae30 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72  s..**.** If a wr
1ae40 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
1ae50 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74  is started and t
1ae60 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74  he Vdbe.usesStmt
1ae70 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a  Journal flag is.
1ae80 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c  ** true (this fl
1ae90 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65  ag is set if the
1aea0 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79   Vdbe may modify
1aeb0 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
1aec0 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68  ow and may.** th
1aed0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1aee0 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65  eption), a state
1aef0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1af00 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65   may also be ope
1af10 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65  ned..** More spe
1af20 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61  cifically, a sta
1af30 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1af40 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66  on is opened iff
1af50 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
1af60 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
1af70 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20  urrently not in 
1af80 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c  autocommit mode,
1af90 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
1afa0 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65   other.** active
1afb0 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73   statements. A s
1afc0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1afd0 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20  tion allows the 
1afe0 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
1aff0 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20  this.** VDBE to 
1b000 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  be rolled back a
1b010 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69  fter an error wi
1b020 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
1b030 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a  roll back the.**
1b040 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
1b050 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72  ion. If no error
1b060 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
1b070 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1b080 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69  ransaction.** wi
1b090 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
1b0a0 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65   commit when the
1b0b0 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a   VDBE halts..**.
1b0c0 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
1b0d0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73   this opcode als
1b0e0 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68  o checks the sch
1b0f0 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e  ema cookie again
1b100 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65  st P3.** and the
1b110 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
1b120 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e  on counter again
1b130 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f  st P4..** The co
1b140 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
1b150 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
1b160 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1b170 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
1b180 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
1b190 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
1b1a0 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
1b1b0 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
1b1c0 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
1b1d0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
1b1e0 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
1b1f0 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49  d the schema.  I
1b200 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20  f the schema.** 
1b210 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66  cookie in P3 dif
1b220 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63  fers from the sc
1b230 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74  hema cookie in t
1b240 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
1b250 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20  er or.** if the 
1b260 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
1b270 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20  n counter in P4 
1b280 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
1b290 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65   current.** gene
1b2a0 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20  ration counter, 
1b2b0 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53  then an SQLITE_S
1b2c0 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72  CHEMA error is r
1b2d0 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74  aised and execut
1b2e0 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54  ion.** halts.  T
1b2f0 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
1b300 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69  ) wrapper functi
1b310 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65  on might then re
1b320 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73  prepare the.** s
1b330 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72  tatement and rer
1b340 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62  un it from the b
1b350 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73  eginning..*/.cas
1b360 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
1b370 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
1b380 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 20 3d 20  ;.  int iMeta = 
1b390 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  0;..  assert( p-
1b3a0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1b3b0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1b3c0 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  nly==0 || pOp->p
1b3d0 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  2==0 );.  assert
1b3e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1b3f0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
1b400 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1b410 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1b420 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
1b430 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
1b440 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
1b450 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
1b460 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
1b470 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
1b480 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1b490 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b4a0 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
1b4b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
1b4c0 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
1b4d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b4e0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1b4f0 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 69 4d  Bt, pOp->p2, &iM
1b500 65 74 61 29 3b 0a 20 20 20 20 74 65 73 74 63 61  eta);.    testca
1b510 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1b520 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a  USY_SNAPSHOT );.
1b530 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
1b540 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45  ==SQLITE_BUSY_RE
1b550 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66  COVERY );.    if
1b560 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1b570 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63  ){.      if( (rc
1b580 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42  &0xff)==SQLITE_B
1b590 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
1b5a0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1b5b0 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
1b5c0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20   p->rc = rc;.   
1b5d0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1b5e0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
1b5f0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1b600 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b610 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
1b620 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
1b630 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
1b640 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
1b650 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
1b660 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
1b670 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1b680 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
1b690 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
1b6a0 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
1b6b0 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
1b6c0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
1b6d0 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
1b6e0 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
1b6f0 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
1b700 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
1b710 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
1b720 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
1b730 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
1b740 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
1b750 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
1b760 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
1b770 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
1b780 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
1b790 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
1b7a0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b7b0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
1b7c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1b7d0 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
1b7e0 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
1b7f0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1b800 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
1b810 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
1b820 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
1b830 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
1b840 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
1b850 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
1b860 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1b870 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
1b880 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
1b890 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
1b8a0 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
1b8b0 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
1b8c0 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
1b8d0 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
1b8e0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1b8f0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
1b900 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
1b910 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
1b920 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20  ImmCons;.    }. 
1b930 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1b940 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1b950 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1b960 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
1b970 35 0a 20 20 20 26 26 20 28 69 4d 65 74 61 21 3d  5.   && (iMeta!=
1b980 70 4f 70 2d 3e 70 33 0a 20 20 20 20 20 20 7c 7c  pOp->p3.      ||
1b990 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1b9a0 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
1b9b0 72 61 74 69 6f 6e 21 3d 70 4f 70 2d 3e 70 34 2e  ration!=pOp->p4.
1b9c0 69 29 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 0a 20  i).  ){.    /*. 
1b9d0 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     ** IMPLEMENTA
1b9e0 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39  TION-OF: R-03189
1b9f0 2d 35 31 31 33 35 20 41 73 20 65 61 63 68 20 53  -51135 As each S
1ba00 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  QL statement run
1ba10 73 2c 20 74 68 65 20 73 63 68 65 6d 61 0a 20 20  s, the schema.  
1ba20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73 20    ** version is 
1ba30 63 68 65 63 6b 65 64 20 74 6f 20 65 6e 73 75 72  checked to ensur
1ba40 65 20 74 68 61 74 20 74 68 65 20 73 63 68 65 6d  e that the schem
1ba50 61 20 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65  a has not change
1ba60 64 20 73 69 6e 63 65 20 74 68 65 0a 20 20 20 20  d since the.    
1ba70 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
1ba80 20 77 61 73 20 70 72 65 70 61 72 65 64 2e 0a 20   was prepared.. 
1ba90 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
1baa0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
1bab0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
1bac0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
1bad0 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
1bae0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
1baf0 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
1bb00 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
1bb10 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
1bb20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1bb30 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
1bb40 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
1bb50 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
1bb60 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
1bb70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
1bb80 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
1bb90 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
1bba0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
1bbb0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
1bbc0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
1bbd0 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
1bbe0 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
1bbf0 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
1bc00 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
1bc10 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
1bc20 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
1bc30 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
1bc40 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
1bc50 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
1bc60 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
1bc70 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
1bc80 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
1bc90 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
1bca0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
1bcb0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
1bcc0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
1bcd0 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
1bce0 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
1bcf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1bd00 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
1bd10 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
1bd20 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
1bd30 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
1bd40 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
1bd50 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
1bd60 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
1bd70 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
1bd80 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1bd90 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
1bda0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
1bdb0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
1bdc0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
1bdd0 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
1bde0 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
1bdf0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
1be00 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
1be10 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
1be20 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1be30 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
1be40 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
1be50 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
1be60 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
1be70 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1be80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1be90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1bea0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1beb0 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
1bec0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
1bed0 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
1bee0 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
1bef0 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
1bf00 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
1bf10 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
1bf20 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1bf30 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
1bf40 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1bf50 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
1bf60 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1bf70 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
1bf80 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1bf90 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
1bfa0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1bfb0 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1bfc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1bfd0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1bfe0 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1bff0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
1c000 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
1c010 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
1c020 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
1c030 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
1c040 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
1c050 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
1c060 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
1c070 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
1c080 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1c090 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1c0a0 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c0c0 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
1c0d0 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
1c0e0 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
1c0f0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1c100 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
1c110 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
1c120 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1c130 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c140 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
1c150 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1c160 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1c170 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1c180 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
1c190 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
1c1a0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1c1b0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1c1c0 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
1c1d0 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1c1e0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1c1f0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
1c200 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
1c210 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
1c220 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
1c230 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
1c240 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c250 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
1c260 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1c270 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e  .** Write the in
1c280 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69  teger value P3 i
1c290 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
1c2a0 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
1c2b0 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73   P1..** P2==1 is
1c2c0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1c2d0 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74  ion.  P2==2 is t
1c2e0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1c2f0 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20  at..** P2==3 is 
1c300 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1c310 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1c320 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1c330 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1c340 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1c350 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1c360 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1c370 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1c380 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1c390 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1c3a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1c3b0 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1c3c0 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1c3d0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1c3e0 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1c3f0 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  {.  Db *pDb;..  
1c400 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
1c410 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
1c420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c430 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
1c440 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
1c450 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c460 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1c470 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1c480 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1c490 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1c4a0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
1c4b0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1c4c0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1c4d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
1c4e0 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
1c4f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c500 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1c510 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
1c520 70 31 2c 20 30 29 20 29 3b 0a 23 69 66 6e 64 65  p1, 0) );.#ifnde
1c530 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
1c540 4e 43 55 52 52 45 4e 54 0a 20 20 69 66 28 20 64  NCURRENT.  if( d
1c550 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20 0a  b->bConcurrent .
1c560 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 32 3d 3d     && (pOp->p2==
1c570 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49  BTREE_USER_VERSI
1c580 4f 4e 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 42  ON || pOp->p2==B
1c590 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e  TREE_APPLICATION
1c5a0 5f 49 44 29 0a 20 20 29 7b 0a 20 20 20 20 72 63  _ID).  ){.    rc
1c5b0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
1c5c0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1c5d0 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
1c5e0 20 6d 6f 64 69 66 79 20 25 73 20 77 69 74 68 69   modify %s withi
1c5f0 6e 20 43 4f 4e 43 55 52 52 45 4e 54 20 74 72 61  n CONCURRENT tra
1c600 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20  nsaction",.     
1c610 20 20 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45     pOp->p2==BTRE
1c620 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 20 3f  E_USER_VERSION ?
1c630 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20   "user_version" 
1c640 3a 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  : "application_i
1c650 64 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 67 6f  d".    );.    go
1c660 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c670 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69  error;.  }.#endi
1c680 66 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  f.  /* See note 
1c690 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1c6a0 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1c6b0 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1c6c0 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1c6d0 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1c6e0 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1c6f0 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1c700 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1c710 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1c720 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1c730 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1c740 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1c750 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1c760 6c 79 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  ly */.    assert
1c770 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 7c 7c 20  ( pOp->p1==1 || 
1c780 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 3d  db->bConcurrent=
1c790 3d 30 20 29 3b 0a 20 20 20 20 70 44 62 2d 3e 70  =0 );.    pDb->p
1c7a0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1c7b0 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1c7c0 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
1c7d0 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
1c7e0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73  maChange;.  }els
1c7f0 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1c800 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1c810 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1c820 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1c830 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1c840 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1c850 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1c860 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1c870 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1c880 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1c890 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1c8a0 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1c8b0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1c8c0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1c8d0 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1c8e0 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1c8f0 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1c900 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1c910 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20  ents(db, 0);.   
1c920 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
1c930 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1c940 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1c950 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1c960 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c970 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
1c980 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1c990 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1c9a0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1c9b0 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
1c9c0 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
1c9d0 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
1c9e0 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
1c9f0 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
1ca00 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
1ca10 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
1ca20 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
1ca30 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
1ca40 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
1ca50 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
1ca60 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
1ca70 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
1ca80 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
1ca90 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
1caa0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
1cab0 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
1cac0 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
1cad0 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
1cae0 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
1caf0 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
1cb00 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
1cb10 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
1cb20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
1cb30 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
1cb40 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
1cb50 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
1cb60 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
1cb70 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69  ** Allowed P5 bi
1cb80 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
1cb90 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46  li>  <b>0x02 OPF
1cba0 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20  LAG_SEEKEQ</b>: 
1cbb0 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c  This cursor will
1cbc0 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f   only be used fo
1cbd0 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c  r.**       equal
1cbe0 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70  ity lookups (imp
1cbf0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61  lemented as a pa
1cc00 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50  ir of opcodes OP
1cc10 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54  _SeekGE/OP_IdxGT
1cc20 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f  .**       of OP_
1cc30 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29  SeekLE/OP_IdxGT)
1cc40 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20  .** </ul>.**.** 
1cc50 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1cc60 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1cc70 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1cc80 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1cc90 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1cca0 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1ccb0 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1ccc0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1ccd0 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74  yInfo .** object
1cce0 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69  , then table bei
1ccf0 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62  ng opened must b
1cd00 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72  e an [index b-tr
1cd10 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  ee] where the.**
1cd20 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
1cd30 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1cd40 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1cd50 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1cd60 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74  f that index b-t
1cd70 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ree. Otherwise, 
1cd80 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1cd90 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74  ger .** value, t
1cda0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65  hen the table be
1cdb0 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1cdc0 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72  be a [table b-tr
1cdd0 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75  ee] with a.** nu
1cde0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1cdf0 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
1ce00 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a   value of P4..**
1ce10 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70  .** See also: Op
1ce20 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49  enWrite, ReopenI
1ce30 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dx.*/./* Opcode:
1ce40 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32   ReopenIdx P1 P2
1ce50 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1ce60 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1ce70 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Db=P3.**.** The 
1ce80 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1ce90 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1cea0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1ceb0 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1cec0 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1ced0 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1cee0 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1cef0 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a  n on the same.**
1cf00 20 62 2d 74 72 65 65 20 61 6e 64 20 69 66 20 69   b-tree and if i
1cf10 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65  t is this opcode
1cf20 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
1cf30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1cf40 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  s,.** if the cur
1cf50 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f  sor is already o
1cf60 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70  pen, do not reop
1cf70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  en it..**.** The
1cf80 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1cf90 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  e may only be us
1cfa0 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 6f 72  ed with P5==0 or
1cfb0 20 50 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b   P5==OPFLAG_SEEK
1cfc0 45 51 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20 50  EQ.** and with P
1cfd0 34 20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45 59  4 being a P4_KEY
1cfe0 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1cff0 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1d000 33 20 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20  3 value must.** 
1d010 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  be the same as e
1d020 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1d030 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1d040 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1d050 72 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a  rsor.** number..
1d060 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35  **.** Allowed P5
1d070 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a   bits:.** <ul>.*
1d080 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20  * <li>  <b>0x02 
1d090 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62  OPFLAG_SEEKEQ</b
1d0a0 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77  >: This cursor w
1d0b0 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  ill only be used
1d0c0 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71   for.**       eq
1d0d0 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28  uality lookups (
1d0e0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
1d0f0 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73   pair of opcodes
1d100 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64   OP_SeekGE/OP_Id
1d110 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20  xGT.**       of 
1d120 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78  OP_SeekLE/OP_Idx
1d130 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  GT).** </ul>.**.
1d140 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f  ** See also: OP_
1d150 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65  OpenRead, OP_Ope
1d160 6e 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  nWrite.*/./* Opc
1d170 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1d180 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1d190 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1d1a0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1d1b0 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1d1c0 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1d1d0 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1d1e0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1d1f0 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1d200 20 28 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74 20   (or whose root 
1d210 70 61 67 65 20 69 73 20 68 65 6c 64 20 69 6e 20  page is held in 
1d220 72 65 67 69 73 74 65 72 20 50 32 20 69 66 20 74  register P2 if t
1d230 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49  he.** OPFLAG_P2I
1d240 53 52 45 47 20 62 69 74 20 69 73 20 73 65 74 20  SREG bit is set 
1d250 69 6e 20 50 35 20 2d 20 73 65 65 20 62 65 6c 6f  in P5 - see belo
1d260 77 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  w)..**.** The P4
1d270 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1d280 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1d290 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1d2a0 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1d2b0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1d2c0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1d2d0 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1d2e0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1d2f0 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e  .** object, then
1d300 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1d310 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b  ned must be an [
1d320 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68  index b-tree] wh
1d330 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e  ere the.** KeyIn
1d340 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  fo object define
1d350 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1d360 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1d370 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74  sequence of that
1d380 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f   index b-tree. O
1d390 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1d3a0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1d3b0 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  * value, then th
1d3c0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1d3d0 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b  ened must be a [
1d3e0 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69  table b-tree] wi
1d3f0 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  th a.** number o
1d400 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73  f columns no les
1d410 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65  s than the value
1d420 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c   of P4..**.** Al
1d430 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a  lowed P5 bits:.*
1d440 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20  * <ul>.** <li>  
1d450 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53  <b>0x02 OPFLAG_S
1d460 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20  EEKEQ</b>: This 
1d470 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79  cursor will only
1d480 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   be used for.** 
1d490 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c        equality l
1d4a0 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e  ookups (implemen
1d4b0 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66  ted as a pair of
1d4c0 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b   opcodes OP_Seek
1d4d0 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20  GE/OP_IdxGT.**  
1d4e0 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c       of OP_SeekL
1d4f0 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c  E/OP_IdxGT).** <
1d500 6c 69 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50 46  li>  <b>0x08 OPF
1d510 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62  LAG_FORDELETE</b
1d520 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 69  >: This cursor i
1d530 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73  s used only to s
1d540 65 65 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  eek.**       and
1d550 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 64 65   subsequently de
1d560 6c 65 74 65 20 65 6e 74 72 69 65 73 20 69 6e 20  lete entries in 
1d570 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1d580 20 54 68 69 73 20 69 73 20 61 0a 2a 2a 20 20 20   This is a.**   
1d590 20 20 20 20 68 69 6e 74 20 74 6f 20 74 68 65 20      hint to the 
1d5a0 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 74  storage engine t
1d5b0 68 61 74 20 74 68 65 20 73 74 6f 72 61 67 65 20  hat the storage 
1d5c0 65 6e 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65  engine is allowe
1d5d0 64 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67  d to.**       ig
1d5e0 6e 6f 72 65 2e 20 20 54 68 65 20 68 69 6e 74 20  nore.  The hint 
1d5f0 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
1d600 68 65 20 6f 66 66 69 63 69 61 6c 20 53 51 4c 69  he official SQLi
1d610 74 65 20 62 2a 74 72 65 65 20 73 74 6f 72 61 67  te b*tree storag
1d620 65 0a 2a 2a 20 20 20 20 20 20 20 65 6e 67 69 6e  e.**       engin
1d630 65 2c 20 62 75 74 20 69 73 20 75 73 65 64 20 62  e, but is used b
1d640 79 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69  y COMDB2..** <li
1d650 3e 20 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41  >  <b>0x10 OPFLA
1d660 47 5f 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55  G_P2ISREG</b>: U
1d670 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1d680 66 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  f register P2.**
1d690 20 20 20 20 20 20 20 61 73 20 74 68 65 20 72 6f         as the ro
1d6a0 6f 74 20 70 61 67 65 2c 20 6e 6f 74 20 74 68 65  ot page, not the
1d6b0 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
1d6c0 65 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  elf..** </ul>.**
1d6d0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1d6e0 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20  tion works like 
1d6f0 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1d700 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1d710 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1d720 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a  ead/write mode..
1d730 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d740 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f  OP_OpenRead, OP_
1d750 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73  ReopenIdx.*/.cas
1d760 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20  e OP_ReopenIdx: 
1d770 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
1d780 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1d790 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
1d7a0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1d7b0 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1d7c0 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1d7d0 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1d7e0 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
1d7f0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1d800 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1d810 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1d820 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1d830 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43  _KEYINFO );.  pC
1d840 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
1d850 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1d860 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f  ur && pCur->pgno
1d870 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e  Root==(u32)pOp->
1d880 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p2 ){.    assert
1d890 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70  ( pCur->iDb==pOp
1d8a0 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20  ->p3 );      /* 
1d8b0 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68  Guaranteed by th
1d8c0 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1d8d0 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65   */.    goto ope
1d8e0 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1d8f0 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20  ts;.  }.  /* If 
1d900 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f  the cursor is no
1d910 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  t currently open
1d920 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61   or is open on a
1d930 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1d940 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c  index, then fall
1d950 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
1d960 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72  _OpenRead to for
1d970 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63  ce a reopen */.c
1d980 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
1d990 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69  .case OP_OpenWri
1d9a0 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70  te:..  assert( p
1d9b0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1d9c0 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1d9d0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1d9e0 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1d9f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1da00 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1da10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1da20 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64  ode==OP_OpenRead
1da30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1da40 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20  =OP_ReopenIdx.  
1da50 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65          || p->re
1da60 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
1da70 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d  if( p->expired==
1da80 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
1da90 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1daa0 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1dab0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1dac0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1dad0 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1dae0 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1daf0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1db00 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1db10 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1db20 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1db30 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1db40 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1db50 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1db60 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1db70 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1db80 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1db90 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1dba0 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1dbb0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1dbc0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1dbd0 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1dbe0 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1dbf0 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1dc00 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1dc10 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1dc20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1dc30 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1dc40 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1dc50 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1dc60 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1dc70 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1dc80 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1dc90 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1dca0 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1dcb0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1dcc0 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1dcd0 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1dce0 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1dcf0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1dd00 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1dd10 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1dd20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1dd30 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1dd40 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 61 73 73  rsor) );.    ass
1dd50 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1dd60 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1dd70 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1dd80 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1dd90 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1dda0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1ddb0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1ddc0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1ddd0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1dde0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1ddf0 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1de00 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1de10 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1de20 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1de30 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1de40 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
1de50 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1de60 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1de70 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1de80 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1de90 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1dea0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1deb0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1dec0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1ded0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1dee0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1def0 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1df00 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1df10 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1df20 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1df30 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1df40 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1df50 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1df60 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1df70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1df80 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1df90 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1dfa0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1dfb0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1dfc0 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1dfd0 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  AllField;.  }els
1dfe0 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1dff0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1e000 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1e010 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1e020 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e030 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1e040 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1e050 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1e060 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1e070 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1e080 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1e090 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1e0a0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1e0b0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1e0c0 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59  ield, iDb, CURTY
1e0d0 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1e0e0 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1e0f0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1e100 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1e110 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1e120 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f   1;.  pCur->pgno
1e130 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65  Root = p2;.#ifde
1e140 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1e150 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20   pCur->wrFlag = 
1e160 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20  wrFlag;.#endif. 
1e170 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e180 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1e190 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1e1a0 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  o, pCur->uc.pCur
1e1b0 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1e1c0 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1e1d0 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1e1e0 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1e1f0 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1e200 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1e210 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1e220 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1e230 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1e240 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1e250 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1e260 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1e270 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1e280 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1e290 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1e2a0 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1e2b0 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1e2c0 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1e2d0 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1e2e0 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1e2f0 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1e300 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1e310 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1e320 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1e330 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1e340 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1e350 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1e360 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74  EEK_EQ );.  test
1e370 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20  case( pOp->p5 & 
1e380 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29  OPFLAG_BULKCSR )
1e390 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1e3a0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
1e3b0 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20  NTS.  testcase( 
1e3c0 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1e3d0 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69  _SEEKEQ );.#endi
1e3e0 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  f.  sqlite3Btree
1e3f0 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28  CursorHintFlags(
1e400 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1e410 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1e440 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1e450 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1e460 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1e470 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e480 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e490 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70   Opcode: OpenDup
1e4a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1e4b0 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1e4c0 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69  rsor P1 that poi
1e4d0 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20  nts to the same 
1e4e0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
1e4f0 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e  as.** cursor P2.
1e500 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72 20    The P2 cursor 
1e510 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f  must have been o
1e520 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72  pened by a prior
1e530 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1e540 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e  l.** opcode.  On
1e550 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1e560 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c  sors may be dupl
1e570 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75  icated..**.** Du
1e580 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72 61  plicate ephemera
1e590 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75 73  l cursors are us
1e5a0 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e  ed for self-join
1e5b0 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65  s of materialize
1e5c0 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65  d views..*/.case
1e5d0 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20   OP_OpenDup: {. 
1e5e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72   VdbeCursor *pOr
1e5f0 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72  ig;    /* The or
1e600 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f  iginal cursor to
1e610 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a   be duplicated *
1e620 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1e630 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  pCx;      /* The
1e640 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a   new cursor */..
1e650 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43    pOrig = p->apC
1e660 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  sr[pOp->p2];.  a
1e670 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42  ssert( pOrig->pB
1e680 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  tx!=0 );  /* Onl
1e690 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  y ephemeral curs
1e6a0 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69  ors can be dupli
1e6b0 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20  cated */..  pCx 
1e6c0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e6d0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72  (p, pOp->p1, pOr
1e6e0 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20  ig->nField, -1, 
1e6f0 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1e700 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1e710 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1e720 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1e730 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1e740 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  al = 1;.  pCx->p
1e750 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d  KeyInfo = pOrig-
1e760 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78  >pKeyInfo;.  pCx
1e770 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69  ->isTable = pOri
1e780 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 72 63  g->isTable;.  rc
1e790 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1e7a0 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74  ursor(pOrig->pBt
1e7b0 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
1e7c0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
1e7f0 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43  Info, pCx->uc.pC
1e800 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65  ursor);.  /* The
1e810 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1e820 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61  sor() routine ca
1e830 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20  n only fail for 
1e840 74 68 65 20 66 69 72 73 74 20 63 75 72 73 6f 72  the first cursor
1e850 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72  .  ** opened for
1e860 20 61 20 64 61 74 61 62 61 73 65 2e 20 20 53 69   a database.  Si
1e870 6e 63 65 20 74 68 65 72 65 20 69 73 20 61 6c 72  nce there is alr
1e880 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72  eady an open cur
1e890 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20  sor when this.  
1e8a0 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e  ** opcode is run
1e8b0 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72  , the sqlite3Btr
1e8c0 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f  eeCursor() canno
1e8d0 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65  t fail */.  asse
1e8e0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1e8f0 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  K );.  break;.}.
1e900 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1e910 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1e920 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1e930 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1e940 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1e950 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1e960 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1e970 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1e980 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1e990 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1e9a0 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1e9b0 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1e9c0 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1e9d0 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1e9e0 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1e9f0 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1ea00 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1ea10 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1ea20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1ea30 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1ea40 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1ea50 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1ea60 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1ea70 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1ea80 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1ea90 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1eaa0 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1eab0 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1eac0 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1ead0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1eae0 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1eaf0 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1eb00 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1eb10 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1eb20 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1eb30 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1eb40 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1eb50 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1eb60 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1eb70 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1eb80 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1eb90 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1eba0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1ebb0 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1ebc0 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1ebd0 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1ebe0 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1ebf0 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1ec00 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1ec10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1ec20 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1ec30 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1ec40 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1ec50 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1ec60 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1ec70 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1ec80 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1ec90 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1eca0 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1ecb0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1ecc0 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1ecd0 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1ece0 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1ecf0 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1ed00 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1ed10 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1ed20 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1ed30 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1ed40 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1ed50 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1ed60 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1ed70 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1ed80 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1ed90 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1eda0 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1edb0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1edc0 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1edd0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1ede0 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1edf0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1ee00 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1ee10 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1ee20 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1ee30 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1ee40 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1ee50 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1ee60 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1ee70 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  -1, CURTYPE_BTRE
1ee80 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  E);.  if( pCx==0
1ee90 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1eea0 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1eeb0 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68   1;.  pCx->isEph
1eec0 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63  emeral = 1;.  rc
1eed0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
1eee0 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
1eef0 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c   db, &pCx->pBtx,
1ef00 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1ef10 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1ef20 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42  OMIT_JOURNAL | B
1ef30 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f  TREE_SINGLE | pO
1ef40 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29  p->p5, vfsFlags)
1ef50 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
1ef60 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
1ef70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1ef80 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42  ginTrans(pCx->pB
1ef90 74 78 2c 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 20  tx, 1, 0);.  }. 
1efa0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1efb0 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
1efc0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1efd0 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
1efe0 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
1eff0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
1f000 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1f010 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
1f020 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
1f030 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
1f040 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
1f050 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
1f060 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
1f070 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
1f080 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1f090 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
1f0a0 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
1f0b0 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
1f0c0 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1f0d0 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49   if( (pCx->pKeyI
1f0e0 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d  nfo = pKeyInfo =
1f0f0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1f100 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  o)!=0 ){.      i
1f110 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
1f120 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1f130 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1f140 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1f150 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1f160 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20  able(pCx->pBtx, 
1f170 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1f180 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1f190 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1f1a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1f1b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1f1c0 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1f1d0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1f1e0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1f1f0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1f200 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1f210 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1f220 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
1f230 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f240 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e  r(pCx->pBtx, pgn
1f250 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  o, BTREE_WRCSR,.
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75  pKeyInfo, pCx->u
1f290 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
1f2a0 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1f2b0 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1f2c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1f2d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1f2e0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20  rsor(pCx->pBtx, 
1f2f0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1f300 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1f330 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1f340 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1f350 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1f360 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1f370 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f380 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65  r;.  pCx->isOrde
1f390 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1f3a0 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1f3b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1f3c0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1f3d0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1f3e0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1f3f0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1f400 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1f410 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1f420 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1f430 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1f440 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1f450 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1f460 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1f470 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1f480 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1f490 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1f4a0 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1f4b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1f4c0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1f4d0 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1f4e0 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1f4f0 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1f500 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1f510 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1f520 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1f530 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1f540 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1f550 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1f560 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1f570 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1f580 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1f590 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1f5a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f5b0 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1f5c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1f5d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1f5e0 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1f5f0 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70  SORTER);.  if( p
1f600 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1f610 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1f620 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1f630 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1f640 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1f650 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1f660 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1f670 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1f680 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1f690 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1f6a0 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1f6b0 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  Cx);.  if( rc ) 
1f6c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1f6d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1f6e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1f6f0 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1f700 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1f710 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1f720 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1f730 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1f740 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1f750 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1f760 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1f770 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1f780 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1f790 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1f7a0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1f7b0 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1f7c0 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1f7d0 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1f7e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1f7f0 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1f800 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1f810 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f820 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f830 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1f840 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1f850 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1f860 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
1f870 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1f880 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1f890 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1f8a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f8b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1f8c0 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1f8d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1f8e0 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
1f8f0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
1f900 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1f910 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1f920 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1f930 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1f940 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1f950 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1f960 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1f970 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1f980 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1f990 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1f9a0 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1f9b0 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1f9c0 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1f9d0 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1f9e0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1f9f0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1fa00 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1fa10 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1fa20 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1fa30 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1fa40 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1fa50 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1fa60 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1fa70 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1fa80 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1fa90 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1faa0 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1fab0 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1fac0 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1fad0 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1fae0 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1faf0 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1fb00 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1fb10 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1fb20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1fb30 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1fb40 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1fb50 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1fb60 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1fb70 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1fb80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1fb90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1fba0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1fbb0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1fbc0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1fbd0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1fbe0 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1fbf0 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
1fc00 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1fc10 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1fc20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1fc30 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65  1;.  pCx->seekRe
1fc40 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  sult = pOp->p2;.
1fc50 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1fc60 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65 20 74 68   1;.  /* Give th
1fc70 69 73 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  is pseudo-cursor
1fc80 20 61 20 66 61 6b 65 20 42 74 43 75 72 73 6f 72   a fake BtCursor
1fc90 20 70 6f 69 6e 74 65 72 20 73 6f 20 74 68 61 74   pointer so that
1fca0 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65   pCx.  ** can be
1fcb0 20 73 61 66 65 6c 79 20 70 61 73 73 65 64 20 74   safely passed t
1fcc0 6f 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  o sqlite3VdbeCur
1fcd0 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68  sorMoveto().  Th
1fce0 69 73 20 61 76 6f 69 64 73 20 61 20 74 65 73 74  is avoids a test
1fcf0 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65  .  ** for pCx->e
1fd00 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1fd10 5f 42 54 52 45 45 20 69 6e 73 69 64 65 20 6f 66  _BTREE inside of
1fd20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1fd30 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20  orMoveto().  ** 
1fd40 77 68 69 63 68 20 69 73 20 61 20 70 65 72 66 6f  which is a perfo
1fd50 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74  rmance optimizat
1fd60 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63  ion */.  pCx->uc
1fd70 2e 70 43 75 72 73 6f 72 20 3d 20 73 71 6c 69 74  .pCursor = sqlit
1fd80 65 33 42 74 72 65 65 46 61 6b 65 56 61 6c 69 64  e3BtreeFakeValid
1fd90 43 75 72 73 6f 72 28 29 3b 0a 20 20 61 73 73 65  Cursor();.  asse
1fda0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1fdb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1fdc0 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1fdd0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1fde0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1fdf0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1fe00 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1fe10 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1fe20 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1fe30 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1fe40 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1fe50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1fe60 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1fe70 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1fe80 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1fe90 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1fea0 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1feb0 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1fec0 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1fed0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64    break;.}..#ifd
1fee0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1fef0 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
1ff00 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  K./* Opcode: Col
1ff10 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20  umnsUsed P1 * * 
1ff20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1ff30 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e  opcode (which on
1ff40 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c  ly exists if SQL
1ff50 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ite was compiled
1ff60 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
1ff70 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1ff80 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66  ED_MASK) identif
1ff90 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e  ies which column
1ffa0 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c  s of the.** tabl
1ffb0 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63  e or index for c
1ffc0 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65  ursor P1 are use
1ffd0 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62  d.  P4 is a 64-b
1ffe0 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50  it integer.** (P
1fff0 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63  4_INT64) in whic
20000 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62  h the first 63 b
20010 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20  its are one for 
20020 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66  each of the.** f
20030 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20  irst 63 columns 
20040 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
20050 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61  index that are a
20060 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20  ctually used.** 
20070 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  by the cursor.  
20080 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  The high-order b
20090 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79  it is set if any
200a0 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a   column after.**
200b0 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65   the 64th is use
200c0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  d..*/.case OP_Co
200d0 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56  lumnsUsed: {.  V
200e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
200f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20100 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20110 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
20120 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
20130 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64  ;.  pC->maskUsed
20140 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70   = *(u64*)pOp->p
20150 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
20160 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
20170 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20  code: SeekGE P1 
20180 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20190 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
201a0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
201b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
201c0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
201d0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
201e0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
201f0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
20200 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
20210 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
20220 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
20230 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
20240 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
20250 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
20260 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
20270 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
20280 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
20290 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
202a0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
202b0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
202c0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
202d0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
202e0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
202f0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
20300 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
20310 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
20320 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
20330 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
20340 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
20350 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
20360 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
20370 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
20380 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
20390 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
203a0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
203b0 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
203c0 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
203d0 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
203e0 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
203f0 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
20400 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
20410 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
20420 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20430 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
20440 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
20450 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
20460 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
20470 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f  ed by an IdxLE o
20480 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
20490 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
204a0 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f  * The IdxLE opco
204b0 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
204c0 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
204d0 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
204e0 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63  the.** IdxLE opc
204f0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
20500 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
20510 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
20520 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
20530 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
20540 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
20550 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
20560 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
20570 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
20580 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
20590 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
205a0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
205b0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
205c0 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
205d0 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
205e0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
205f0 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
20600 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
20610 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
20620 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20630 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20640 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20650 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
20660 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
20670 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
20680 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
20690 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
206a0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
206b0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
206c0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
206d0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
206e0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
206f0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
20700 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
20710 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
20720 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
20730 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
20740 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
20750 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
20760 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
20770 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
20780 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
20790 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
207a0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
207b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
207c0 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
207d0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
207e0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
207f0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
20800 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
20810 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
20820 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
20830 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
20840 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
20850 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
20860 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
20870 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
20880 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
20890 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
208a0 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
208b0 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
208c0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
208d0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
208e0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
208f0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
20900 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
20910 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
20920 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
20930 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
20940 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
20950 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
20960 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
20970 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
20980 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
20990 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
209a0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
209b0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
209c0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
209d0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
209e0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
209f0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
20a00 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
20a10 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
20a20 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
20a30 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
20a40 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
20a50 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
20a60 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
20a70 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
20a80 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
20a90 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
20aa0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
20ab0 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
20ac0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
20ad0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
20ae0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
20af0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
20b00 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
20b10 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
20b20 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
20b30 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
20b40 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
20b50 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
20b60 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
20b70 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
20b80 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
20b90 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
20ba0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
20bb0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
20bc0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
20bd0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
20be0 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
20bf0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
20c00 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
20c10 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
20c20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
20c30 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
20c40 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
20c50 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
20c60 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
20c70 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
20c80 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
20c90 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
20ca0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
20cb0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
20cc0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
20cd0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
20ce0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
20cf0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
20d00 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
20d10 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
20d20 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
20d30 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
20d40 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
20d50 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
20d60 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
20d70 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
20d80 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
20d90 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
20da0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
20db0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
20dc0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
20dd0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
20de0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20df0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20e00 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
20e10 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
20e20 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
20e30 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
20e40 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
20e50 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20e60 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
20e70 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
20e80 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
20e90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
20ea0 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
20eb0 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
20ec0 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
20ed0 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
20ee0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
20ef0 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
20f00 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
20f10 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
20f20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
20f30 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
20f40 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
20f50 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
20f60 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
20f70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
20f80 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47  lowed by an IdxG
20f90 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
20fa0 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
20fb0 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f  ..** The IdxGE o
20fc0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
20fd0 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
20fe0 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
20ff0 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20  ut the.** IdxGE 
21000 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
21010 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
21020 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
21030 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
21040 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
21050 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
21060 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61  Ge, SeekLt.*/.ca
21070 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20  se OP_SeekLT:   
21080 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
21090 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73  n3, group */.cas
210a0 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20  e OP_SeekLE:    
210b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
210c0 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65  3, group */.case
210d0 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
210e0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
210f0 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20  , group */.case 
21100 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20  OP_SeekGT: {    
21110 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
21120 20 67 72 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20   group */.  int 
21130 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  res;           /
21140 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
21150 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b  ult */.  int oc;
21160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
21170 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43  pcode */.  VdbeC
21180 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
21190 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73   The cursor to s
211a0 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65  eek */.  Unpacke
211b0 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54  dRecord r;  /* T
211c0 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66  he key to seek f
211d0 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
211e0 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
211f0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
21200 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  or fields in the
21210 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b   key */.  i64 iK
21220 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ey;          /* 
21230 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65  The rowid we are
21240 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20   to seek to */. 
21250 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20   int eqOnly;    
21260 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65      /* Only inte
21270 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73  rested in == res
21280 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ults */..  asser
21290 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
212a0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
212b0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
212c0 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20   pOp->p2!=0 );. 
212d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
212e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
212f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
21300 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
21310 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
21320 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  E );.  assert( O
21330 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53  P_SeekLE == OP_S
21340 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73  eekLT+1 );.  ass
21350 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d  ert( OP_SeekGE =
21360 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b  = OP_SeekLT+2 );
21370 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
21380 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGT == OP_SeekL
21390 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+3 );.  assert(
213a0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
213b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
213c0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
213d0 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  oc = pOp->opc
213e0 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20  ode;.  eqOnly = 
213f0 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0;.  pC->nullRow
21400 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 0;.#ifdef SQL
21410 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
21420 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
21430 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  code;.#endif..  
21440 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
21450 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54  ){.    /* The BT
21460 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67  REE_SEEK_EQ flag
21470 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20   is only set on 
21480 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f  index cursors */
21490 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
214a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
214b0 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
214c0 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
214d0 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20  K_EQ)==0.       
214e0 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50         || CORRUP
214f0 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  T_DB );..    /* 
21500 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
21510 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
21520 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
21530 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
21540 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
21550 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
21560 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
21570 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
21580 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
21590 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e  the seek, so con
215a0 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
215b0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
215c0 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28  ->p3];.    if( (
215d0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
215e0 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
215f0 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
21600 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  tr ){.      appl
21610 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
21620 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d  (pIn3, 0);.    }
21630 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69  .    iKey = sqli
21640 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
21650 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  pIn3);..    /* I
21660 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
21670 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
21680 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
21690 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
216a0 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
216b0 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
216c0 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
216d0 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
216e0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e   */.    if( (pIn
216f0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
21700 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
21710 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
21720 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
21730 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
21740 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61   the P3 value ca
21750 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
21760 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20  d into any kind 
21770 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20  of a number,.   
21780 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
21790 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73   seek is not pos
217a0 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74  sible, so jump t
217b0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  o P2 */.        
217c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
217d0 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f  1,2); goto jump_
217e0 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62  to_p2;.        b
217f0 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  reak;.      }.. 
21800 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
21810 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
21820 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e  y is larger than
21830 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
21840 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
21850 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
21860 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c  e >= for > and <
21870 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66   for <=. e.g. if
21880 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d   the search term
21890 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39  .      ** is 4.9
218a0 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72   and the integer
218b0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35   approximation 5
218c0 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  :.      **.     
218d0 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20   **        (x > 
218e0 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
218f0 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a  (x >= 5).      *
21900 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34  *        (x <= 4
21910 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
21920 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a   <  5).      */.
21930 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
21940 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r<(double)iKey
21950 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
21960 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28  rt( OP_SeekGE==(
21970 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a  OP_SeekGT-1) );.
21980 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
21990 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53  OP_SeekLT==(OP_S
219a0 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20  eekLE-1) );.    
219b0 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
219c0 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29  SeekLE & 0x0001)
219d0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
219e0 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
219f0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
21a00 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
21a10 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d  & 0x0001) ) oc--
21a20 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
21a30 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f   /* If the appro
21a40 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73  ximation iKey is
21a50 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68   smaller than th
21a60 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
21a70 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
21a80 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c  rm, substitute <
21a90 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f  = for < and > fo
21aa0 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20  r >=.  */.      
21ab0 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75  else if( pIn3->u
21ac0 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r>(double)iKey 
21ad0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
21ae0 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f  t( OP_SeekLE==(O
21af0 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20  P_SeekLT+1) );. 
21b00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
21b10 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65  P_SeekGT==(OP_Se
21b20 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekGE+1) );.     
21b30 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
21b40 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d  eekLT & 0x0001)=
21b50 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78  =(OP_SeekGE & 0x
21b60 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
21b70 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
21b80 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26  1)==(OP_SeekLT &
21b90 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b   0x0001) ) oc++;
21ba0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a  .      }.    } .
21bb0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21bc0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
21bd0 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
21be0 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
21bf0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
21c00 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
21c10 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
21c20 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
21c30 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  /.    if( rc!=SQ
21c40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
21c50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
21c60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
21c70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
21c80 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74  For a cursor wit
21c90 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b  h the BTREE_SEEK
21ca0 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74  _EQ hint, only t
21cb0 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64  he OP_SeekGE and
21cc0 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c  .    ** OP_SeekL
21cd0 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c  E opcodes are al
21ce0 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65  lowed, and these
21cf0 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61   must be immedia
21d00 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20  tely followed.  
21d10 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64    ** by an OP_Id
21d20 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20  xGT or OP_IdxLT 
21d30 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69  opcode, respecti
21d40 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73  vely, with the s
21d50 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a  ame key..    */.
21d60 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42      if( sqlite3B
21d70 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e  treeCursorHasHin
21d80 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
21d90 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29  , BTREE_SEEK_EQ)
21da0 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79   ){.      eqOnly
21db0 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   = 1;.      asse
21dc0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
21dd0 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f  =OP_SeekGE || pO
21de0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
21df0 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  ekLE );.      as
21e00 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63  sert( pOp[1].opc
21e10 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c  ode==OP_IdxLT ||
21e20 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
21e30 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
21e40 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
21e50 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29  .p1==pOp[0].p1 )
21e60 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
21e70 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30  pOp[1].p2==pOp[0
21e80 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p2 );.      as
21e90 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d  sert( pOp[1].p3=
21ea0 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20  =pOp[0].p3 );.  
21eb0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
21ec0 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e  1].p4.i==pOp[0].
21ed0 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20  p4.i );.    }.. 
21ee0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
21ef0 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72  >p4.i;.    asser
21f00 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
21f10 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20  P4_INT32 );.    
21f20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
21f30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
21f40 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
21f50 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
21f60 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a  = (u16)nField;..
21f70 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
21f80 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
21f90 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
21fa0 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
21fb0 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d     **   if( oc==
21fc0 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d  OP_SeekGT || oc=
21fd0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20  =OP_SeekLE ){.  
21fe0 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
21ff0 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20  lt_rc = -1;.    
22000 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  **   }else{.    
22010 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74  **     r.default
22020 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a  _rc = +1;.    **
22030 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20     }.    */.    
22040 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28  r.default_rc = (
22050 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65  (1 & (oc - OP_Se
22060 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31  ekLT)) ? -1 : +1
22070 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
22080 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c!=OP_SeekGT || 
22090 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31  r.default_rc==-1
220a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
220b0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c  oc!=OP_SeekLE ||
220c0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
220d0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
220e0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c   oc!=OP_SeekGE |
220f0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
22100 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
22110 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc!=OP_SeekLT 
22120 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
22130 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d  =+1 );..    r.aM
22140 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
22150 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
22160 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69  TE_DEBUG.    { i
22170 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
22180 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
22190 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
221a0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
221b0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72  ; }.#endif.    r
221c0 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20  .eqSeen = 0;.   
221d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
221e0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
221f0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
22200 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
22210 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
22220 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
22230 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22240 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
22250 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26      if( eqOnly &
22260 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b  & r.eqSeen==0 ){
22270 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
22280 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67  es!=0 );.      g
22290 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75  oto seek_not_fou
222a0 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  nd;.    }.  }.  
222b0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
222c0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
222d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
222e0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
222f0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
22300 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
22310 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
22320 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45  f( oc>=OP_SeekGE
22330 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
22340 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63  =OP_SeekGE || oc
22350 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20  ==OP_SeekGT );. 
22360 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
22370 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
22380 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20  P_SeekGT) ){.   
22390 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
223a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
223b0 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70  reeNext(pC->uc.p
223c0 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20  Cursor, 0);.    
223d0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
223e0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  _OK ){.        i
223f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
22400 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  NE ){.          
22410 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
22420 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
22430 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
22440 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
22450 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22460 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
22470 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
22480 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
22490 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
224a0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
224b0 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d  OP_SeekLT || oc=
224c0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
224d0 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
224e0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
224f0 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20  _SeekLT) ){.    
22500 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
22510 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22520 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75  eePrevious(pC->u
22530 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  c.pCursor, 0);. 
22540 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
22550 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
22560 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22570 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20  _DONE ){.       
22580 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
22590 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  K;.          res
225a0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
225b0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67  lse{.          g
225c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
225d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
225e0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  }.      }.    }e
225f0 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
22600 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
22610 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
22620 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
22630 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
22640 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
22650 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
22660 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
22670 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
22680 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
22690 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b  ;.    }.  }.seek
226a0 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73  _not_found:.  as
226b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
226c0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
226d0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
226e0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
226f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
22700 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71  ;.  }else if( eq
22710 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65  Only ){.    asse
22720 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
22730 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70  e==OP_IdxLT || p
22740 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
22750 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f  _IdxGT );.    pO
22760 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65  p++; /* Skip the
22770 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f   OP_IdxLt or OP_
22780 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f  IdxGT that follo
22790 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61  ws */.  }.  brea
227a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
227b0 20 53 65 65 6b 48 69 74 20 50 31 20 50 32 20 2a   SeekHit P1 P2 *
227c0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
227d0 3a 20 73 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a  : seekHit=P2.**.
227e0 2a 2a 20 53 65 74 20 74 68 65 20 73 65 65 6b 48  ** Set the seekH
227f0 69 74 20 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f  it flag on curso
22800 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
22810 65 20 69 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20  e in P2..** The 
22820 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20  seekHit flag is 
22830 75 73 65 64 20 62 79 20 74 68 65 20 49 66 4e 6f  used by the IfNo
22840 48 6f 70 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  Hope opcode..**.
22850 2a 2a 20 50 31 20 6d 75 73 74 20 62 65 20 61 20  ** P1 must be a 
22860 76 61 6c 69 64 20 62 2d 74 72 65 65 20 63 75 72  valid b-tree cur
22870 73 6f 72 2e 20 20 50 32 20 6d 75 73 74 20 62 65  sor.  P2 must be
22880 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
22890 2c 0a 2a 2a 20 65 69 74 68 65 72 20 30 20 6f 72  ,.** either 0 or
228a0 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53   1..*/.case OP_S
228b0 65 65 6b 48 69 74 3a 20 7b 0a 20 20 56 64 62 65  eekHit: {.  Vdbe
228c0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
228d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
228e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
228f0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
22900 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22910 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
22920 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22930 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70   pOp->p2==0 || p
22940 4f 70 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70  Op->p2==1 );.  p
22950 43 2d 3e 73 65 65 6b 48 69 74 20 3d 20 70 4f 70  C->seekHit = pOp
22960 2d 3e 70 32 20 26 20 31 3b 0a 20 20 62 72 65 61  ->p2 & 1;.  brea
22970 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22980 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
22990 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
229a0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
229b0 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
229c0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
229d0 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
229e0 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
229f0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
22a00 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
22a10 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
22a20 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
22a30 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
22a40 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
22a50 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
22a60 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
22a70 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
22a80 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
22a90 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
22aa0 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
22ab0 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
22ac0 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
22ad0 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
22ae0 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
22af0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
22b00 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
22b10 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
22b20 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
22b30 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
22b40 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a  here it can be.*
22b50 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68  * advanced in th
22b60 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74  e forward direct
22b70 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69  ion.  The Next i
22b80 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
22b90 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74  work,.** but not
22ba0 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75   the Prev instru
22bb0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
22bc0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
22bd0 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74   NoConflict, Not
22be0 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a  Exists. SeekGe.*
22bf0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
22c00 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
22c10 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
22c20 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
22c30 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
22c40 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
22c50 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
22c60 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
22c70 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
22c80 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
22c90 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
22ca0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
22cb0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
22cc0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
22cd0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
22ce0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
22cf0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
22d00 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
22d10 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
22d20 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
22d30 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
22d40 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
22d50 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
22d60 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
22d70 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
22d80 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
22d90 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
22da0 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
22db0 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
22dc0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
22dd0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
22de0 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
22df0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
22e00 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
22e10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
22e20 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
22e30 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
22e40 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
22e50 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
22e60 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
22e70 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
22e80 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
22e90 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
22ea0 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
22eb0 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
22ec0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
22ed0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
22ee0 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
22ef0 69 63 74 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f  ict, IfNoHope.*/
22f00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
22f10 48 6f 70 65 20 50 31 20 50 32 20 50 33 20 50 34  Hope P1 P2 P3 P4
22f20 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22f30 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
22f40 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
22f50 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
22f60 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
22f70 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
22f80 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
22f90 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
22fa0 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
22fb0 65 2e 20 20 49 66 20 74 68 65 20 73 65 65 6b 48  e.  If the seekH
22fc0 69 74 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f  it flag is set o
22fd0 6e 20 50 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  n P1, then.** th
22fe0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 20 6e  is opcode is a n
22ff0 6f 2d 6f 70 2e 20 20 42 75 74 20 69 66 20 74 68  o-op.  But if th
23000 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f  e seekHit flag o
23010 66 20 50 31 20 69 73 20 63 6c 65 61 72 2c 20 74  f P1 is clear, t
23020 68 65 6e 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20  hen.** check to 
23030 73 65 65 20 69 66 20 74 68 65 72 65 20 69 73 20  see if there is 
23040 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
23050 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65  that matches the
23060 0a 2a 2a 20 70 72 65 66 69 78 20 69 64 65 6e 74  .** prefix ident
23070 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
23080 50 34 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79  P4.  If no entry
23090 20 6d 61 74 63 68 65 73 20 74 68 65 20 70 72 65   matches the pre
230a0 66 69 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  fix,.** jump to 
230b0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
230c0 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a  all through..**.
230d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 62  ** This opcode b
230e0 65 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e  ehaves like OP_N
230f0 6f 74 46 6f 75 6e 64 20 69 66 20 74 68 65 20 73  otFound if the s
23100 65 65 6b 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69  eekHit.** flag i
23110 73 20 63 6c 65 61 72 20 61 6e 64 20 69 74 20 62  s clear and it b
23120 65 68 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e  ehaves like OP_N
23130 6f 6f 70 20 69 66 20 74 68 65 20 73 65 65 6b 48  oop if the seekH
23140 69 74 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  it flag is set..
23150 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
23160 65 20 69 73 20 75 73 65 64 20 69 6e 20 49 4e 20  e is used in IN 
23170 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e  clause processin
23180 67 20 66 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f  g for a multi-co
23190 6c 75 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20  lumn key..** If 
231a0 61 6e 20 49 4e 20 63 6c 61 75 73 65 20 69 73 20  an IN clause is 
231b0 61 74 74 61 63 68 65 64 20 74 6f 20 61 6e 20 65  attached to an e
231c0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6b 65  lement of the ke
231d0 79 20 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65  y other than the
231e0 0a 2a 2a 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c  .** left-most el
231f0 65 6d 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68  ement, and if th
23200 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
23210 65 73 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72  es on the most r
23220 65 63 65 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76  ecent.** seek ov
23230 65 72 20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79  er the whole key
23240 2c 20 74 68 65 6e 20 69 74 20 6d 69 67 68 74 20  , then it might 
23250 62 65 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74  be that one of t
23260 68 65 20 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a  he key element.*
23270 2a 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 73  * to the left is
23280 20 70 72 6f 68 69 62 69 74 69 6e 67 20 61 20 6d   prohibiting a m
23290 61 74 63 68 2c 20 61 6e 64 20 68 65 6e 63 65 20  atch, and hence 
232a0 74 68 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70  there is "no hop
232b0 65 22 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74  e" of.** any mat
232c0 63 68 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ch regardless of
232d0 20 68 6f 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61   how many IN cla
232e0 75 73 65 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  use elements are
232f0 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20   checked..** In 
23300 73 75 63 68 20 61 20 63 61 73 65 2c 20 77 65 20  such a case, we 
23310 61 62 61 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63  abandon the IN c
23320 6c 61 75 73 65 20 73 65 61 72 63 68 20 65 61 72  lause search ear
23330 6c 79 2c 20 75 73 69 6e 67 20 74 68 69 73 0a 2a  ly, using this.*
23340 2a 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 6f  * opcode.  The o
23350 70 63 6f 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73  pcode name comes
23360 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
23370 68 61 74 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20  hat the.** jump 
23380 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 72  is taken if ther
23390 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f  e is "no hope" o
233a0 66 20 61 63 68 69 65 76 69 6e 67 20 61 20 6d 61  f achieving a ma
233b0 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  tch..**.** See a
233c0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  lso: NotFound, S
233d0 65 65 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63  eekHit.*/./* Opc
233e0 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20  ode: NoConflict 
233f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
23400 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
23410 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
23420 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
23430 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
23440 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
23450 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
23460 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
23470 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
23480 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
23490 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
234a0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
234b0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a  ** record..** .*
234c0 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f  * Cursor P1 is o
234d0 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n an index btree
234e0 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  .  If the record
234f0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
23500 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74  3 and P4.** cont
23510 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61  ains any NULL va
23520 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69  lue, jump immedi
23530 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
23540 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68   all terms of th
23550 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20  e.** record are 
23560 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20  not-NULL then a 
23570 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f  check is done to
23580 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
23590 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20  y row in the.** 
235a0 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68  P1 index btree h
235b0 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65  as a matching ke
235c0 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68  y prefix.  If th
235d0 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68  ere are no match
235e0 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65  es, jump.** imme
235f0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
23600 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61  If there is a ma
23610 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  tch, fall throug
23620 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20  h and leave the 
23630 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69  P1.** cursor poi
23640 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74  nting to the mat
23650 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  ching row..**.**
23660 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
23670 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f  similar to OP_No
23680 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20  tFound with the 
23690 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20  exceptions that 
236a0 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73  the.** branch is
236b0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66   always taken if
236c0 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
236d0 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75   search key inpu
236e0 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t is NULL..**.**
236f0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
23700 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
23710 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
23720 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a  re it cannot be.
23730 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65  ** advanced in e
23740 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
23750 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
23760 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
23770 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64  rev.** opcodes d
23780 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72  o not work after
23790 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e   this operation.
237a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
237b0 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64   NotFound, Found
237c0 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63  , NotExists.*/.c
237d0 61 73 65 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a  ase OP_IfNoHope:
237e0 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20   {     /* jump, 
237f0 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in3 */.  VdbeCur
23800 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
23810 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23820 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23830 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23840 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23850 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23860 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 65   );.  if( pC->se
23870 65 6b 48 69 74 20 29 20 62 72 65 61 6b 3b 0a 20  ekHit ) break;. 
23880 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
23890 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e   into OP_NotFoun
238a0 64 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e  d */.}.case OP_N
238b0 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f  oConflict:     /
238c0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
238d0 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
238e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
238f0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
23900 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
23910 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
23920 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
23930 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75  ts;.  int takeJu
23940 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20  mp;.  int ii;.  
23950 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23960 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
23970 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72  ackedRecord *pFr
23980 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ee;.  UnpackedRe
23990 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20  cord *pIdxKey;. 
239a0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
239b0 72 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  r;..#ifdef SQLIT
239c0 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
239d0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
239e0 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
239f0 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
23a00 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
23a10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23a20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23a30 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
23a40 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
23a50 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
23a60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23a70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23a80 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
23a90 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
23aa0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
23ab0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
23ac0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
23ad0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
23ae0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
23af0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
23b00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
23b10 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
23b20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
23b30 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28  able==0 );.  if(
23b40 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
23b50 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
23b60 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
23b70 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
23b80 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
23b90 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
23ba0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
23bb0 45 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d  EBUG.    for(ii=
23bc0 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
23bd0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
23be0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
23bf0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
23c00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72        assert( (r
23c10 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  .aMem[ii].flags 
23c20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c  & MEM_Zero)==0 |
23c30 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d  | r.aMem[ii].n==
23c40 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  0 );.      if( i
23c50 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41  i ) REGISTER_TRA
23c60 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26  CE(pOp->p3+ii, &
23c70 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20  r.aMem[ii]);.   
23c80 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49   }.#endif.    pI
23c90 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20  dxKey = &r;.    
23ca0 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c  pFree = 0;.  }el
23cb0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
23cc0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
23cd0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63  M_Blob );.    rc
23ce0 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
23cf0 6e 33 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n3);.    assert(
23d00 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
23d10 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  | rc==SQLITE_NOM
23d20 45 4d 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63  EM );.    if( rc
23d30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
23d40 20 20 20 20 70 46 72 65 65 20 3d 20 70 49 64 78      pFree = pIdx
23d50 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
23d60 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65  eAllocUnpackedRe
23d70 63 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66  cord(pC->pKeyInf
23d80 6f 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  o);.    if( pIdx
23d90 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
23da0 5f 6d 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65  _mem;.    sqlite
23db0 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
23dc0 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
23dd0 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
23de0 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
23df0 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
23e00 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b  lt_rc = 0;.  tak
23e10 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28  eJump = 0;.  if(
23e20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
23e30 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
23e40 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
23e50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
23e60 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
23e70 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
23e80 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
23e90 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
23ea0 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
23eb0 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
23ec0 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
23ed0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
23ee0 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46  ; ii<pIdxKey->nF
23ef0 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
23f00 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e     if( pIdxKey->
23f10 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
23f20 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
23f30 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20       takeJump = 
23f40 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
23f50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
23f60 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
23f70 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
23f80 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
23f90 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
23fa0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
23fb0 28 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65  ( pFree ) sqlite
23fc0 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46  3DbFreeNN(db, pF
23fd0 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ree);.  if( rc!=
23fe0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
23ff0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24000 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
24010 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
24020 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45   res;.  alreadyE
24030 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
24040 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
24050 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74  = 1-alreadyExist
24060 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
24070 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
24080 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24090 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
240a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
240b0 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
240c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
240d0 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d  (alreadyExists!=
240e0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c  0,2);.    if( al
240f0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
24100 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
24110 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
24120 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65  BranchTaken(take
24130 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69  Jump||alreadyExi
24140 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts==0,2);.    i
24150 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21  f( takeJump || !
24160 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
24170 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
24180 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
24190 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
241a0 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
241b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
241c0 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
241d0 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
241e0 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
241f0 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
24200 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
24210 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
24220 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
24230 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  3 does not conta
24240 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  in an integer or
24250 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a   if P1 does not.
24260 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ** contain a rec
24270 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
24280 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
24290 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
242a0 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73  .** Or, if P2 is
242b0 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c   0, raise an SQL
242c0 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
242d0 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
242e0 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72  ntain.** a recor
242f0 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
24300 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74  then .** leave t
24310 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
24320 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
24330 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
24340 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
24350 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
24360 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45  *.** The OP_NotE
24370 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72  xists opcode per
24380 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
24390 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69  peration, but wi
243a0 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a  th OP_NotExists.
243b0 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74  ** the P3 regist
243c0 65 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61  er must be guara
243d0 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  nteed to contain
243e0 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
243f0 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a  e.  With this.**
24400 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65   opcode, registe
24410 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63  r P3 might not c
24420 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
24430 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
24440 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
24450 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
24460 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
24470 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
24480 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
24490 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
244a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
244b0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
244c0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
244d0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
244e0 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
244f0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
24500 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
24510 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
24520 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
24530 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
24540 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
24550 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
24560 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
24570 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
24580 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
24590 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
245a0 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
245b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
245c0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
245d0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
245e0 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
245f0 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
24600 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
24610 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
24620 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
24630 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
24640 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
24650 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
24660 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
24670 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
24680 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20  ely to P2.  Or, 
24690 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73  if P2 is 0, rais
246a0 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43  e an.** SQLITE_C
246b0 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
246c0 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
246d0 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
246e0 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a  owid P3 then .**
246f0 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
24700 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
24710 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
24720 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
24730 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
24740 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
24750 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70   OP_SeekRowid op
24760 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
24770 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
24780 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73   but also allows
24790 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73   the.** P3 regis
247a0 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ter to contain a
247b0 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c   non-integer val
247c0 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  ue, in which cas
247d0 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a  e the jump is.**
247e0 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20   always taken.  
247f0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75  This opcode requ
24800 69 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77  ires that P3 alw
24810 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ays contain an i
24820 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  nteger..**.** Th
24830 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
24840 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
24850 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
24860 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
24870 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
24880 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
24890 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
248a0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
248b0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
248c0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
248d0 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
248e0 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
248f0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
24900 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
24910 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
24920 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
24930 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
24940 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
24950 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
24960 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
24970 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f  Conflict, SeekRo
24980 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  wid.*/.case OP_S
24990 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  eekRowid: {     
249a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
249b0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
249c0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
249d0 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
249e0 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
249f0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
24a00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
24a10 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
24a20 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
24a30 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 70 49   /* Make sure pI
24a40 6e 33 2d 3e 75 2e 69 20 63 6f 6e 74 61 69 6e 73  n3->u.i contains
24a50 20 61 20 76 61 6c 69 64 20 69 6e 74 65 67 65 72   a valid integer
24a60 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
24a70 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 6b 65  of.    ** the ke
24a80 79 20 76 61 6c 75 65 2c 20 62 75 74 20 64 6f 20  y value, but do 
24a90 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 64  not change the d
24aa0 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
24ab0 65 67 69 73 74 65 72 2c 20 61 73 0a 20 20 20 20  egister, as.    
24ac0 2a 2a 20 6f 74 68 65 72 20 70 61 72 74 73 20 6f  ** other parts o
24ad0 66 20 74 68 65 20 70 65 72 70 61 72 65 64 20 73  f the perpared s
24ae0 74 61 74 65 6d 65 6e 74 20 6d 69 67 68 74 20 62  tatement might b
24af0 65 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  e depending on t
24b00 68 65 0a 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  he.    ** curren
24b10 74 20 64 61 74 61 74 79 70 65 2e 20 2a 2f 0a 20  t datatype. */. 
24b20 20 20 20 75 31 36 20 6f 72 69 67 46 6c 61 67 73     u16 origFlags
24b30 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
24b40 20 20 20 20 69 6e 74 20 69 73 4e 6f 74 49 6e 74      int isNotInt
24b50 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
24b60 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49 54 45  ity(pIn3, SQLITE
24b70 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
24b80 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 73 4e  coding);.    isN
24b90 6f 74 49 6e 74 20 3d 20 28 70 49 6e 33 2d 3e 66  otInt = (pIn3->f
24ba0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
24bb0 3d 30 3b 0a 20 20 20 20 70 49 6e 33 2d 3e 66 6c  =0;.    pIn3->fl
24bc0 61 67 73 20 3d 20 6f 72 69 67 46 6c 61 67 73 3b  ags = origFlags;
24bd0 0a 20 20 20 20 69 66 28 20 69 73 4e 6f 74 49 6e  .    if( isNotIn
24be0 74 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  t ) goto jump_to
24bf0 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  _p2;.  }.  /* Fa
24c00 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
24c10 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a  OP_NotExists */.
24c20 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
24c30 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  s:          /* j
24c40 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49  ump, in3 */.  pI
24c50 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
24c60 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
24c70 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
24c80 4d 5f 49 6e 74 29 21 3d 30 20 7c 7c 20 70 4f 70  M_Int)!=0 || pOp
24c90 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
24ca0 6b 52 6f 77 69 64 20 29 3b 0a 20 20 61 73 73 65  kRowid );.  asse
24cb0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24cc0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24cd0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24ce0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24d00 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
24d10 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
24d20 65 65 6b 4f 70 20 3d 20 4f 50 5f 53 65 65 6b 52  eekOp = OP_SeekR
24d30 6f 77 69 64 3b 0a 23 65 6e 64 69 66 0a 20 20 61  owid;.#endif.  a
24d40 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
24d50 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
24d60 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
24d70 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
24d80 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
24d90 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
24da0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
24db0 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79   res = 0;.  iKey
24dc0 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
24dd0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24de0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
24df0 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20  pCrsr, 0, iKey, 
24e00 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  0, &res);.  asse
24e10 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
24e20 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20  K || res==0 );. 
24e30 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
24e40 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
24e50 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
24e60 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  */.  pC->nullRow
24e70 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
24e80 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
24e90 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
24ea0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
24eb0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
24ec0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
24ed0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
24ee0 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21   res;.  if( res!
24ef0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
24f00 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24f10 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
24f20 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  p2==0 ){.      r
24f30 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
24f40 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c  PT_BKPT;.    }el
24f50 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  se{.      goto j
24f60 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
24f70 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
24f80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24f90 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
24fa0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24fb0 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a  Sequence P1 P2 *
24fc0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
24fd0 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50  : r[P2]=cursor[P
24fe0 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46  1].ctr++.**.** F
24ff0 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61  ind the next ava
25000 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20  ilable sequence 
25010 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f  number for curso
25020 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74  r P1..** Write t
25030 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
25040 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  er into register
25050 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75   P2..** The sequ
25060 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74  ence number on t
25070 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63  he cursor is inc
25080 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74  remented after t
25090 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  his.** instructi
250a0 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  on.  .*/.case OP
250b0 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20  _Sequence: {    
250c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
250d0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
250e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
250f0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
25100 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
25110 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
25120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
25130 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65  pCsr[pOp->p1]->e
25140 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
25150 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20  _VTAB );.  pOut 
25160 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
25170 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
25180 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
25190 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
251a0 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
251b0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
251c0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
251d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
251e0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
251f0 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e  .** Get a new in
25200 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d  teger record num
25210 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69  ber (a.k.a "rowi
25220 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20  d") used as the 
25230 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a  key to a table..
25240 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75  ** The record nu
25250 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76  mber is not prev
25260 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61  iously used as a
25270 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61   key in the data
25280 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68  base.** table th
25290 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
252a0 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77  nts to.  The new
252b0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
252c0 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69  s written.** wri
252d0 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72  tten to register
252e0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
252f0 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20  >0 then P3 is a 
25300 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
25310 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
25320 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c  is VDBE that hol
25330 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65  ds .** the large
25340 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65  st previously ge
25350 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
25360 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65  umber. No new re
25370 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65  cord numbers are
25380 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62  .** allowed to b
25390 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  e less than this
253a0 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69   value. When thi
253b0 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
253c0 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a  its maximum, .**
253d0 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20   an SQLITE_FULL 
253e0 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
253f0 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73  ed. The P3 regis
25400 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77  ter is updated w
25410 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e  ith the '.** gen
25420 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
25430 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65  mber. This P3 me
25440 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20  chanism is used 
25450 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
25460 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43  t the.** AUTOINC
25470 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a  REMENT feature..
25480 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f  */.case OP_NewRo
25490 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
254a0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36   /* out2 */.  i6
254b0 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20  4 v;            
254c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20       /* The new 
254d0 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43  rowid */.  VdbeC
254e0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20  ursor *pC;      
254f0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74    /* Cursor of t
25500 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20  able to get the 
25510 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  new rowid */.  i
25520 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
25530 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
25540 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72  of an sqlite3Btr
25550 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e  eeLast() */.  in
25560 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20  t cnt;          
25570 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
25580 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
25590 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20  ber of searches 
255a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
255b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
255c0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
255d0 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f  largest rowid fo
255e0 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  r AUTOINCREMENT 
255f0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
25600 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52  pFrame;     /* R
25610 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42  oot frame of VDB
25620 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20  E */..  v = 0;. 
25630 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74   res = 0;.  pOut
25640 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
25650 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
25660 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
25670 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
25680 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25690 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
256a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
256b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
256c0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
256d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
256e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
256f0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
25700 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
25710 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f  !=0 );.  {.    /
25720 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
25730 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
25740 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
25750 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
25760 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
25770 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
25780 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
25790 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
257a0 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
257b0 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
257c0 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
257d0 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
257e0 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
257f0 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
25800 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
25810 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
25820 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
25830 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
25840 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
25850 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25860 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
25870 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
25880 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
25890 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
258a0 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
258b0 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
258c0 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
258d0 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
258e0 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
258f0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
25900 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
25910 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
25920 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
25930 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
25940 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
25950 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
25960 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
25970 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
25980 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
25990 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
259a0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
259b0 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
259c0 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
259d0 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
259e0 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
259f0 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
25a00 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
25a10 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
25a20 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
25a30 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
25a40 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
25a50 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
25a60 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
25a70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
25a80 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
25a90 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
25aa0 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
25ab0 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
25ac0 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
25ad0 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
25ae0 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
25af0 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
25b00 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
25b10 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
25b20 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
25b30 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
25b40 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
25b50 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
25b60 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
25b70 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
25b80 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
25b90 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
25ba0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25bb0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
25bc0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
25bd0 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
25be0 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
25bf0 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  4 */.      }else
25c00 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
25c10 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
25c20 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
25c30 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  uc.pCursor) );. 
25c40 20 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74         v = sqlit
25c50 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
25c60 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
25c70 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  );.        if( v
25c80 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
25c90 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
25ca0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
25cb0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
25cc0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
25cd0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
25ce0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
25cf0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
25d00 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
25d10 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
25d20 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
25d30 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
25d40 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
25d50 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
25d60 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
25d70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
25d80 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
25d90 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
25da0 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
25db0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
25dc0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
25dd0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
25de0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
25df0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
25e00 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
25e10 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
25e20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25e30 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
25e40 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
25e50 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
25e60 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
25e70 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
25e80 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
25e90 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
25ea0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
25eb0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25ec0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
25ed0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
25ee0 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
25ef0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
25f00 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
25f10 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
25f20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
25f30 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
25f40 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
25f50 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
25f60 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
25f70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
25f80 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
25f90 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61  y(pMem);.      a
25fa0 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
25fb0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
25fc0 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
25fd0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
25fe0 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  r */.      if( p
25ff0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
26000 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
26010 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
26020 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
26030 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
26040 20 52 2d 31 37 38 31 37 2d 30 30 36 33 30 20 2a   R-17817-00630 *
26050 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
26060 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
26070 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
26080 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
26090 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  +1 ){.        v 
260a0 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
260b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
260c0 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
260d0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69    }.#endif.    i
260e0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
260f0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
26100 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
26110 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
26120 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
26130 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
26140 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
26150 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
26160 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
26170 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
26180 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
26190 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
261a0 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
261b0 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
261c0 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
261d0 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
261e0 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
261f0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
26200 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
26210 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
26220 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
26230 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
26240 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
26250 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
26280 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
26290 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63  able. */.      c
262a0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
262b0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
262c0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
262d0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
262e0 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
262f0 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20  OWID>>1); v++;  
26300 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76  /* Ensure that v
26310 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
26320 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d   zero */.      }
26330 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73  while(  ((rc = s
26340 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
26350 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
26360 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
26370 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
26380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
263b0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
263c0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
263d0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
263e0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b  && (++cnt<100));
263f0 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20  .      if( rc ) 
26400 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26410 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  o_error;.      i
26420 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
26430 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
26440 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
26450 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a   R-38219-53002 *
26460 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
26470 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
26480 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
26490 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20   assert( v>0 ); 
264a0 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d   /* EV: R-40812-
264b0 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20  03570 */.    }. 
264c0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
264d0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
264e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
264f0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26500 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
26510 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
26520 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
26530 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
26540 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
26550 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72  key=r[P3] data=r
26560 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  [P2].**.** Write
26570 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
26580 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
26590 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
265a0 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
265b0 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
265c0 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
265d0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
265e0 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
265f0 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
26600 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
26610 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c  the value MEM_Bl
26620 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ob stored in reg
26630 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
26640 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
26650 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
26660 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
26670 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49  st.** be a MEM_I
26680 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nt..**.** If the
26690 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
266a0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
266b0 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
266c0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
266d0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
266e0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
266f0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
26700 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
26710 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
26720 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
26730 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
26740 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
26750 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
26760 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
26770 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
26780 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
26790 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  fied)..**.** If 
267a0 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
267b0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
267c0 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20   P5 is set, the 
267d0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
267e0 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74  ight.** run fast
267f0 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61  er by avoiding a
26800 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65  n unnecessary se
26810 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  ek on cursor P1.
26820 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68    However,.** th
26830 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
26840 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74  RESULT flag must
26850 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
26860 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20  there have been 
26870 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b  no prior.** seek
26880 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  s on the cursor 
26890 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72  or if the most r
268a0 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20  ecent seek used 
268b0 61 20 6b 65 79 20 65 71 75 61 6c 20 74 6f 20 50  a key equal to P
268c0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
268d0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
268e0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
268f0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
26900 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
26910 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
26920 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
26930 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
26940 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
26950 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
26960 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
26970 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
26980 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
26990 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
269a0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
269b0 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
269c0 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
269d0 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  a Table structur
269e0 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c  e, or may be NUL
269f0 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20  L. If it is .** 
26a00 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
26a10 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28  he update-hook (
26a20 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
26a30 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
26a40 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e  ked .** followin
26a50 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
26a60 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
26a70 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
26a80 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
26a90 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
26aa0 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
26ab0 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
26ac0 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
26ad0 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
26ae0 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
26af0 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
26b00 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
26b10 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
26b20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
26b30 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
26b40 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
26b50 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
26b60 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
26b70 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
26b80 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
26b90 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
26ba0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
26bb0 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
26bc0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
26bd0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
26be0 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
26bf0 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
26c00 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
26c10 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
26c20 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
26c30 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b  ntkey=P3 data=r[
26c40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P2].**.** This w
26c50 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
26c60 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
26c70 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
26c80 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
26c90 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
26ca0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
26cb0 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
26cc0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
26cd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
26ce0 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
26cf0 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
26d00 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
26d10 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
26d20 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
26d30 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
26d40 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
26d50 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
26d60 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
26d70 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
26d80 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  rd */.  VdbeCurs
26d90 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
26da0 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
26db0 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
26dc0 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
26dd0 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
26de0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
26df0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
26e00 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
26e10 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
26e20 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
26e30 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
26e40 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
26e50 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61  ate hook */.  Ta
26e60 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
26e70 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  /* Table structu
26e80 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64  re - used by upd
26e90 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61  ate and pre-upda
26ea0 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74  te hooks */.  Bt
26eb0 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20  reePayload x;   
26ec0 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65  /* Payload to be
26ed0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20   inserted */..  
26ee0 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
26ef0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
26f00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26f10 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26f20 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
26f30 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61  memIsValid(pData
26f40 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
26f50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26f60 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26f80 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
26f90 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
26fa0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
26fb0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
26fc0 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  rt( (pOp->p5 & O
26fd0 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c  PFLAG_ISNOOP) ||
26fe0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
26ff0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27000 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
27010 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d  || pOp->p4type>=
27020 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52  P4_STATIC );.  R
27030 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
27040 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20  p->p2, pData);. 
27050 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
27060 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
27070 70 43 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  pC);..  if( pOp-
27080 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
27090 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
270a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
270b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
270c0 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
270d0 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
270e0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
270f0 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
27100 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
27110 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e  , pKey);.    x.n
27120 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
27130 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
27140 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
27150 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
27160 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20  );.    x.nKey = 
27170 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
27180 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
27190 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53  =P4_TABLE && HAS
271a0 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
271b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
271c0 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
271d0 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
271e0 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  pC->iDb].zDbSNam
271f0 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f  e;.    pTab = pO
27200 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20  p->p4.pTab;.    
27210 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
27220 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
27230 29 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54  ) || HasRowid(pT
27240 61 62 29 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ab) );.  }else{.
27250 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20      pTab = 0;.  
27260 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e    zDb = 0;  /* N
27270 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
27280 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
27290 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
272a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
272b0 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
272c0 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
272d0 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68  the pre-update h
272e0 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  ook, if any */. 
272f0 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
27300 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
27310 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 21  ateCallback && !
27320 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
27330 47 5f 49 53 55 50 44 41 54 45 29 20 29 7b 0a 20  G_ISUPDATE) ){. 
27340 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
27350 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
27360 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45   pC, SQLITE_INSE
27370 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78  RT, zDb, pTab, x
27380 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a  .nKey,pOp->p2);.
27390 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
273a0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
273b0 6b 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43  k==0 || pTab->aC
273c0 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ol==0 ){.      /
273d0 2a 20 50 72 65 76 65 6e 74 20 70 6f 73 74 2d 75  * Prevent post-u
273e0 70 64 61 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20  pdate hook from 
273f0 72 75 6e 6e 69 6e 67 20 69 6e 20 63 61 73 65 73  running in cases
27400 20 77 68 65 6e 20 69 74 20 73 68 6f 75 6c 64 20   when it should 
27410 6e 6f 74 20 2a 2f 0a 20 20 20 20 20 20 70 54 61  not */.      pTa
27420 62 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  b = 0;.    }.  }
27430 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
27440 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
27450 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
27460 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
27470 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
27480 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
27490 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
274a0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
274b0 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
274c0 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65  = x.nKey;.  asse
274d0 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
274e0 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
274f0 5f 53 74 72 29 20 29 3b 0a 20 20 78 2e 70 44 61  _Str) );.  x.pDa
27500 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20  ta = pData->z;. 
27510 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61 74 61   x.nData = pData
27520 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c  ->n;.  seekResul
27530 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
27540 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
27550 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
27560 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
27570 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
27580 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
27590 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74    x.nZero = pDat
275a0 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65  a->u.nZero;.  }e
275b0 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f  lse{.    x.nZero
275c0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b   = 0;.  }.  x.pK
275d0 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  ey = 0;.  rc = s
275e0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
275f0 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
27600 2c 20 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70  , &x,.      (pOp
27610 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41  ->p5 & (OPFLAG_A
27620 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56  PPEND|OPFLAG_SAV
27630 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65  EPOSITION)), see
27640 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
27650 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27660 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
27670 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
27680 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
27690 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
276a0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
276b0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20  . */.  if( rc ) 
276c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
276d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
276e0 54 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72  Tab ){.    asser
276f0 74 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  t( db->xUpdateCa
27700 6c 6c 62 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20  llback!=0 );.   
27710 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e 61   assert( pTab->a
27720 43 6f 6c 21 3d 30 20 29 3b 0a 20 20 20 20 64 62  Col!=0 );.    db
27730 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
27740 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
27750 2c 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 4f  ,.           (pO
27760 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
27770 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
27780 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
27790 45 5f 49 4e 53 45 52 54 2c 0a 20 20 20 20 20 20  E_INSERT,.      
277a0 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e       zDb, pTab->
277b0 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a  zName, x.nKey);.
277c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
277d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
277e0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
277f0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
27800 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
27810 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
27820 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27830 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  nting..**.** If 
27840 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  the OPFLAG_SAVEP
27850 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74  OSITION bit of t
27860 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
27870 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20  is set, then.** 
27880 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  the cursor will 
27890 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
278a0 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65 20   at  either the 
278b0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
278c0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
278d0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
278e0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
278f0 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
27900 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
27910 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
27920 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
27930 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20  e a no-op. As a 
27940 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20  result, in this 
27950 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b  case.** it is ok
27960 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63   to delete a rec
27970 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
27980 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20  a Next loop. If 
27990 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  .** OPFLAG_SAVEP
279a0 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50  OSITION bit of P
279b0 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  5 is clear, then
279c0 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
279d0 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61   be.** left in a
279e0 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
279f0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
27a00 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
27a10 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
27a20 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  5, that indicate
27a30 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64  s that this.** d
27a40 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76  elete one of sev
27a50 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20  eral associated 
27a60 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20  with deleting a 
27a70 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c  table row and al
27a80 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  l its.** associa
27a90 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65  ted index entrie
27aa0 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  s.  Exactly one 
27ab0 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73  of those deletes
27ac0 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72 79   is the "primary
27ad0 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68  ".** delete.  Th
27ae0 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c  e others are all
27af0 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45   on OPFLAG_FORDE
27b00 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20  LETE cursors or 
27b10 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b  else are.** mark
27b20 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58 44  ed with the AUXD
27b30 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  ELETE flag..**.*
27b40 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
27b50 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
27b60 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50  P2 (NB: P2 not P
27b70 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  5) is set, then 
27b80 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67  the row.** chang
27b90 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  e count is incre
27ba0 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
27bb0 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
27bc0 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
27bd0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
27be0 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
27bf0 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
27c00 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
27c10 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
27c20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69  NULL then it poi
27c30 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f  nts to a Table o
27c40 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63  bject. In this c
27c50 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74  ase either .** t
27c60 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65  he update or pre
27c70 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72  -update hook, or
27c80 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e   both, may be in
27c90 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75  voked. The P1 cu
27ca0 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76  rsor must.** hav
27cb0 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
27cc0 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  d using OP_NotFo
27cd0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
27ce0 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
27cf0 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61  e in .** this ca
27d00 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79  se. Specifically
27d10 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  , if one is conf
27d20 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d  igured, the pre-
27d30 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a  update hook is .
27d40 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34  ** invoked if P4
27d50 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68   is not NULL. Th
27d60 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73  e update-hook is
27d70 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20   invoked if one 
27d80 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a  is configured, .
27d90 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  ** P4 is not NUL
27da0 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41  L, and the OPFLA
27db0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69  G_NCHANGE flag i
27dc0 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a  s set in P2..**.
27dd0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
27de0 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
27df0 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65  s set in P2, the
27e00 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  n P3 contains th
27e10 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20  e address.** of 
27e20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
27e30 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
27e40 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  e value that the
27e50 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
27e60 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74  w will.** be set
27e70 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74   to by the updat
27e80 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
27e90 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
27ea0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73  rsor *pC;.  cons
27eb0 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54  t char *zDb;.  T
27ec0 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e  able *pTab;.  in
27ed0 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70  t opflags;..  op
27ee0 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b  flags = pOp->p2;
27ef0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27f00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27f10 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27f20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27f30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27f40 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
27f50 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
27f60 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
27f70 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
27f80 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
27f90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27fa0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
27fb0 3d 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ==0 );.  sqlite3
27fc0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
27fd0 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69  nter(p, pC);..#i
27fe0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27ff0 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  G.  if( pOp->p4t
28000 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
28010 20 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70   HasRowid(pOp->p
28020 34 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e  4.pTab) && pOp->
28030 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  p5==0 ){.    /* 
28040 49 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74  If p5 is zero, t
28050 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  he seek operatio
28060 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65  n that positione
28070 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  d the cursor pri
28080 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f  or to.    ** OP_
28090 44 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65  Delete will have
280a0 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43   also set the pC
280b0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66  ->movetoTarget f
280c0 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69  ield to the rowi
280d0 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20  d of.    ** the 
280e0 72 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e  row that is bein
280f0 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20  g deleted */.   
28100 20 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69   i64 iKey = sqli
28110 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b  te3BtreeIntegerK
28120 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ey(pC->uc.pCurso
28130 72 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  r);.    assert( 
28140 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
28150 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65  ==iKey );.  }.#e
28160 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68  ndif..  /* If th
28170 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72  e update-hook or
28180 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b   pre-update-hook
28190 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
281a0 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a  , set zDb to.  *
281b0 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * the name of th
281c0 65 20 64 62 20 74 6f 20 70 61 73 73 20 61 73 20  e db to pass as 
281d0 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20  to it. Also set 
281e0 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20  local pTab to a 
281f0 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e  copy.  ** of p4.
28200 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  pTab. Finally, i
28210 66 20 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e  f p5 is true, in
28220 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
28230 69 73 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20  is cursor was.  
28240 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69  ** last moved wi
28250 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50  th OP_Next or OP
28260 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20  _Prev, not Seek 
28270 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74  or NotFound, set
28280 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f   .  ** VdbeCurso
28290 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74  r.movetoTarget t
282a0 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  o the current ro
282b0 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  wid.  */.  if( p
282c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
282d0 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41  ABLE && HAS_UPDA
282e0 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20  TE_HOOK(db) ){. 
282f0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
28300 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  Db>=0 );.    ass
28310 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ert( pOp->p4.pTa
28320 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20  b!=0 );.    zDb 
28330 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
28340 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20  b].zDbSName;.   
28350 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e   pTab = pOp->p4.
28360 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70  pTab;.    if( (p
28370 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
28380 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30  SAVEPOSITION)!=0
28390 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20   && pC->isTable 
283a0 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76  ){.      pC->mov
283b0 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
283c0 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b  te3BtreeIntegerK
283d0 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ey(pC->uc.pCurso
283e0 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  r);.    }.  }els
283f0 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20  e{.    zDb = 0; 
28400 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
28410 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
28420 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
28430 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20  .    pTab = 0;  
28440 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28450 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
28460 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
28470 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
28480 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
28490 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76  TE_HOOK.  /* Inv
284a0 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61  oke the pre-upda
284b0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
284c0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62  red. */.  if( db
284d0 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  ->xPreUpdateCall
284e0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
284f0 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65  pTab ){.    asse
28500 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20  rt( !(opflags & 
28510 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
28520 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 48 61   .         || Ha
28530 73 52 6f 77 69 64 28 70 54 61 62 29 3d 3d 30 20  sRowid(pTab)==0 
28540 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28 61 4d  .         || (aM
28550 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67  em[pOp->p3].flag
28560 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20  s & MEM_Int) .  
28570 20 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33    );.    sqlite3
28580 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
28590 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20  k(p, pC,.       
285a0 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c   (opflags & OPFL
285b0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
285c0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
285d0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20  QLITE_DELETE, . 
285e0 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62         zDb, pTab
285f0 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  , pC->movetoTarg
28600 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d  et,.        pOp-
28610 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20  >p3.    );.  }. 
28620 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f   if( opflags & O
28630 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62  PFLAG_ISNOOP ) b
28640 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20  reak;.#endif. . 
28650 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74   /* Only flags t
28660 68 61 74 20 63 61 6e 20 62 65 20 73 65 74 20 61  hat can be set a
28670 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20  re SAVEPOISTION 
28680 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f  and AUXDELETE */
28690 20 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70   .  assert( (pOp
286a0 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f  ->p5 & ~(OPFLAG_
286b0 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46  SAVEPOSITION|OPF
286c0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d  LAG_AUXDELETE))=
286d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
286e0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
286f0 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50  ION==BTREE_SAVEP
28700 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73  OSITION );.  ass
28710 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44  ert( OPFLAG_AUXD
28720 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58  ELETE==BTREE_AUX
28730 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65  DELETE );..#ifde
28740 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
28750 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d   if( p->pFrame==
28760 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  0 ){.    if( pC-
28770 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a  >isEphemeral==0.
28780 20 20 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d          && (pOp-
28790 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58  >p5 & OPFLAG_AUX
287a0 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
287b0 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61     && (pC->wrFla
287c0 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  g & OPFLAG_FORDE
287d0 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29  LETE)==0.      )
287e0 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65  {.      nExtraDe
287f0 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  lete++;.    }.  
28800 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
28810 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
28820 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65  {.      nExtraDe
28830 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  lete--;.    }.  
28840 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d  }.#endif..  rc =
28850 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
28860 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ete(pC->uc.pCurs
28870 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  or, pOp->p5);.  
28880 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
28890 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
288a0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
288b0 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20  = 0;.  if( rc ) 
288c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
288d0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49  o_error;..  /* I
288e0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
288f0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
28900 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c  d. */.  if( opfl
28910 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  ags & OPFLAG_NCH
28920 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ANGE ){.    p->n
28930 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66  Change++;.    if
28940 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
28950 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69  lback && HasRowi
28960 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20  d(pTab) ){.     
28970 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
28980 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
28990 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45  Arg, SQLITE_DELE
289a0 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a  TE, zDb, pTab->z
289b0 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
289c0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
289d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
289e0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
289f0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61     }.  }..  brea
28a00 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
28a10 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
28a20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
28a30 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
28a40 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
28a50 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
28a60 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
28a70 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
28a80 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
28a90 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
28aa0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
28ab0 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
28ac0 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
28ad0 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
28ae0 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
28af0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
28b00 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
28b10 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
28b20 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
28b30 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
28b40 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
28b50 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
28b60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28b70 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
28b80 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
28b90 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
28ba0 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28  f key(P1)!=trim(
28bb0 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50  r[P3],P4) goto P
28bc0 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
28bd0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
28be0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28bf0 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69  compares a prefi
28c00 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  x of the.** reco
28c10 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  rd blob in regis
28c20 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61  ter P3 against a
28c30 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65   prefix of the e
28c40 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68  ntry that .** th
28c50 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
28c60 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
28c70 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66   to.  Only the f
28c80 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a  irst P4 fields.*
28c90 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74  * of r[P3] and t
28ca0 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  he sorter record
28cb0 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a   are compared..*
28cc0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
28cd0 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20  3 or the sorter 
28ce0 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20  contains a NULL 
28cf0 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20  in one of their 
28d00 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66  significant.** f
28d10 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74  ields (not count
28d20 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64  ing the P4 field
28d30 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69  s at the end whi
28d40 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20  ch are ignored) 
28d50 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  then.** the comp
28d60 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65  arison is assume
28d70 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a  d to be equal..*
28d80 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
28d90 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75  h to next instru
28da0 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f  ction if the two
28db0 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65   records compare
28dc0 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63   equal to.** eac
28dd0 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74  h other.  Jump t
28de0 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65  o P2 if they are
28df0 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63   different..*/.c
28e00 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
28e10 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
28e20 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
28e30 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43  res;.  int nKeyC
28e40 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ol;..  pC = p->a
28e50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28e60 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
28e70 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72  r(pC) );.  asser
28e80 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
28e90 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49  P4_INT32 );.  pI
28ea0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
28eb0 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d  p3];.  nKeyCol =
28ec0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65   pOp->p4.i;.  re
28ed0 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
28ee0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
28ef0 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
28f00 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b   nKeyCol, &res);
28f10 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
28f20 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
28f30 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
28f40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
28f50 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
28f60 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
28f70 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
28f80 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
28f90 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  a P1 P2 P3 * *.*
28fa0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
28fb0 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
28fc0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
28fd0 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
28fe0 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
28ff0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
29000 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20  ..** Then clear 
29010 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65  the column heade
29020 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f  r cache on curso
29030 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P3..**.** This
29040 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61   opcode is norma
29050 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20  lly use to move 
29060 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20  a record out of 
29070 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69  the sorter and i
29080 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65  nto.** a registe
29090 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  r that is the so
290a0 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64  urce for a pseud
290b0 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63  o-table cursor c
290c0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
290d0 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61  OpenPseudo.  Tha
290e0 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  t pseudo-table c
290f0 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65  ursor is the one
29100 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66   that is identif
29110 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65  ied by.** parame
29120 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e  ter P3.  Clearin
29130 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20  g the P3 column 
29140 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66  cache as part of
29150 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76   this opcode sav
29160 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61  es.** us from ha
29170 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20  ving to issue a 
29180 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77  separate NullRow
29190 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
291a0 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65  clear that cache
291b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
291c0 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
291d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
291e0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
291f0 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d  ->p2];.  pC = p-
29200 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
29210 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
29220 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
29230 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
29240 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f  terRowkey(pC, pO
29250 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  ut);.  assert( r
29260 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
29270 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d  (pOut->flags & M
29280 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73  EM_Blob) );.  as
29290 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
292a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
292b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
292c0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
292d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
292e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
292f0 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  ]->cacheStatus =
29300 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
29310 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29320 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
29330 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
29340 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
29350 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
29360 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
29370 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
29380 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20  content for the 
29390 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69 63 68  row at .** which
293a0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 63 75   cursor P1 is cu
293b0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
293c0 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
293d0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
293e0 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
293f0 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
29400 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
29410 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
29420 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
29430 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
29440 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
29450 49 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  If cursor P1 is 
29460 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74  an index, then t
29470 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 74 68  he content is th
29480 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72 6f 77  e key of the row
29490 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  ..** If cursor P
294a0 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68  2 is a table, th
294b0 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65  en the content e
294c0 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65 20  xtracted is the 
294d0 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  data..**.** If t
294e0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
294f0 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
29500 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
29510 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
29520 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
29530 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
29540 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  able..**.** If P
29550 33 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  3!=0 then this o
29560 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64  pcode is allowed
29570 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65 70 68 65   to make an ephe
29580 6d 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a  meral pointer.**
29590 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
295a0 73 65 20 70 61 67 65 2e 20 20 54 68 61 74 20 6d  se page.  That m
295b0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f  eans that the co
295c0 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 6f 75 74  ntent of the out
295d0 70 75 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  put.** register 
295e0 77 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64 61  will be invalida
295f0 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74  ted as soon as t
29600 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20  he cursor moves 
29610 2d 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d  - including.** m
29620 6f 76 65 73 20 63 61 75 73 65 64 20 62 79 20 6f  oves caused by o
29630 74 68 65 72 20 63 75 72 73 6f 72 73 20 74 68 61  ther cursors tha
29640 74 20 22 73 61 76 65 22 20 74 68 65 20 63 75 72  t "save" the cur
29650 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20  rent cursors.** 
29660 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65  position in orde
29670 72 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20  r that they can 
29680 77 72 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d  write to the sam
29690 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d  e table.  If P3=
296a0 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70  =0.** then a cop
296b0 79 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 73  y of the data is
296c0 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72   made into memor
296d0 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61 73  y.  P3!=0 is fas
296e0 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d  ter, but.** P3==
296f0 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a  0 is safer..**.*
29700 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20  * If P3!=0 then 
29710 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
29720 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 69  he P2 register i
29730 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72  s unsuitable for
29740 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65   use.** in OP_Re
29750 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f  sult and any OP_
29760 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61  Result will inva
29770 6c 69 64 61 74 65 20 74 68 65 20 50 32 20 72 65  lidate the P2 re
29780 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a  gister content..
29790 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69 73 74  ** The P2 regist
297a0 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e  er content is in
297b0 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63  validated by opc
297c0 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e  odes like OP_Fun
297d0 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61  ction or.** by a
297e0 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65  ny use of anothe
297f0 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  r cursor pointin
29800 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61  g to the same ta
29810 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
29820 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
29830 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
29840 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
29850 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74    u32 n;..  pOut
29860 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
29870 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73  e(p, pOp);..  as
29880 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29890 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
298a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
298b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
298c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
298d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
298e0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
298f0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
29900 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
29910 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61  er(pC)==0 );.  a
29920 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
29930 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
29940 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
29950 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
29960 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
29970 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52  ;..  /* The OP_R
29980 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
29990 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
299a0 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
299b0 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f  * OP_SeekRowid o
299c0 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  r OP_Rewind/Op_N
299d0 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
299e0 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
299f0 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d  ions.  ** that m
29a00 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20  ight invalidate 
29a10 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a  the cursor..  **
29a20 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
29a30 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
29a40 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
29a50 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
29a60 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
29a70 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
29a80 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
29a90 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
29aa0 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
29ab0 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
29ac0 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
29ad0 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
29ae0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
29af0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
29b00 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
29b10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29b20 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
29b30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
29b40 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
29b50 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
29b60 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
29b70 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
29b80 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
29b90 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
29ba0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
29bb0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
29bc0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
29bd0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
29be0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
29bf0 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74  dif..  n = sqlit
29c00 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
29c10 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28  ze(pCrsr);.  if(
29c20 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
29c30 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
29c40 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
29c50 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
29c60 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d  .  testcase( n==
29c70 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
29c80 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
29c90 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ree(pCrsr, 0, n,
29ca0 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63   pOut);.  if( rc
29cb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
29cc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
29cd0 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65  ( !pOp->p3 ) Dee
29ce0 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
29cf0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
29d00 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
29d10 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
29d20 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
29d30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29d40 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
29d50 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
29d60 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
29d70 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
29d80 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
29d90 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
29da0 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
29db0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
29dc0 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
29dd0 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
29de0 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
29df0 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
29e00 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
29e10 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
29e20 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
29e30 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
29e40 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
29e50 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
29e60 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
29e70 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
29e80 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
29e90 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
29ea0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
29eb0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
29ec0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
29ed0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29ee0 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
29ef0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
29f00 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
29f10 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
29f20 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
29f30 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
29f40 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
29f50 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29f60 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
29f70 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29f80 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29f90 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29fa0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29fb0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
29fc0 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
29fd0 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
29fe0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
29ff0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2a000 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
2a010 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
2a020 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2a030 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
2a040 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
2a050 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a060 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2a070 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
2a080 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2a090 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
2a0a0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2a0b0 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
2a0c0 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
2a0d0 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
2a0e0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2a0f0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
2a100 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
2a110 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
2a120 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
2a130 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
2a140 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
2a150 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2a160 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
2a170 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2a180 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a190 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
2a1a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2a1b0 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
2a1c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2a1d0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2a1e0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
2a1f0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2a200 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
2a210 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2a220 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
2a230 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
2a240 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2a250 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
2a260 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
2a270 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
2a280 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2a290 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2a2a0 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  }.    v = sqlite
2a2b0 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
2a2c0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
2a2d0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
2a2e0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
2a2f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
2a300 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
2a310 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
2a320 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
2a330 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
2a340 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
2a350 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
2a360 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
2a370 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
2a380 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
2a390 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
2a3a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
2a3b0 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
2a3c0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
2a3d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2a3e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2a3f0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2a400 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a410 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2a420 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
2a430 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
2a440 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2a450 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
2a460 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2a470 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20  RTYPE_BTREE ){. 
2a480 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
2a490 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
2a4a0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2a4b0 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e  ClearCursor(pC->
2a4c0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
2a4d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2a4e0 45 42 55 47 0a 20 20 69 66 28 20 70 43 2d 3e 73  EBUG.  if( pC->s
2a4f0 65 65 6b 4f 70 3d 3d 30 20 29 20 70 43 2d 3e 73  eekOp==0 ) pC->s
2a500 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52  eekOp = OP_NullR
2a510 6f 77 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  ow;.#endif.  bre
2a520 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a530 3a 20 53 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a  : SeekEnd P1 * *
2a540 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74   * *.**.** Posit
2a550 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 61 74  ion cursor P1 at
2a560 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
2a570 62 74 72 65 65 20 66 6f 72 20 74 68 65 20 70 75  btree for the pu
2a580 72 70 6f 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65  rpose of.** appe
2a590 6e 64 69 6e 67 20 61 20 6e 65 77 20 65 6e 74 72  nding a new entr
2a5a0 79 20 6f 6e 74 6f 20 74 68 65 20 62 74 72 65 65  y onto the btree
2a5b0 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73  ..**.** It is as
2a5c0 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 63  sumed that the c
2a5d0 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f 6e  ursor is used on
2a5e0 6c 79 20 66 6f 72 20 61 70 70 65 6e 64 69 6e 67  ly for appending
2a5f0 20 61 6e 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68   and so.** if th
2a600 65 20 63 75 72 73 6f 72 20 69 73 20 76 61 6c 69  e cursor is vali
2a610 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  d, then the curs
2a620 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64 79 20  or must already 
2a630 62 65 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61  be pointing.** a
2a640 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
2a650 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f   btree and so no
2a660 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d 61 64   changes are mad
2a670 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73  e to.** the curs
2a680 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  or..*/./* Opcode
2a690 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Last P1 P2 * *
2a6a0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
2a6b0 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
2a6c0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
2a6d0 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
2a6e0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
2a6f0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
2a700 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
2a710 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
2a720 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
2a730 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2a740 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
2a750 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
2a760 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2a770 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
2a780 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
2a790 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
2a7a0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
2a7b0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
2a7c0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
2a7d0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
2a7e0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
2a7f0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
2a800 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
2a810 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
2a820 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
2a830 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
2a840 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
2a850 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
2a860 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
2a870 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
2a880 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20  t Next..*/.case 
2a890 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65  OP_SeekEnd:.case
2a8a0 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
2a8b0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2a8c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2a8d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
2a8e0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
2a8f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a900 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2a910 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2a920 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2a930 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2a940 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2a950 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2a960 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2a970 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
2a980 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72  >uc.pCursor;.  r
2a990 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  es = 0;.  assert
2a9a0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 23 69  ( pCrsr!=0 );.#i
2a9b0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2a9c0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
2a9d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
2a9e0 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
2a9f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45  opcode==OP_SeekE
2aa00 6e 64 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  nd ){.    assert
2aa10 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  ( pOp->p2==0 );.
2aa20 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75      pC->seekResu
2aa30 6c 74 20 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28  lt = -1;.    if(
2aa40 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
2aa50 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70 43 72  sorIsValidNN(pCr
2aa60 73 72 29 20 29 7b 0a 20 20 20 20 20 20 62 72 65  sr) ){.      bre
2aa70 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
2aa80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2aa90 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
2aaa0 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
2aab0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
2aac0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2aad0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
2aae0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2aaf0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 63  _STALE;.  if( rc
2ab00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2ab10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2ab20 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
2ab30 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2ab40 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
2ab50 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
2ab60 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
2ab70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ab80 4f 70 63 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65  Opcode: IfSmalle
2ab90 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
2aba0 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20 74 68  *.** Estimate th
2abb0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2abc0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 50 31   in the table P1
2abd0 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  .  Jump to P2 if
2abe0 20 74 68 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74   that.** estimat
2abf0 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 61  e is less than a
2ac00 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a  pproximately 2**
2ac10 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73  (0.1*P3)..*/.cas
2ac20 65 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20  e OP_IfSmaller: 
2ac30 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2ac40 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2ac50 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2ac60 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2ac70 65 73 3b 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20  es;.  i64 sz;.. 
2ac80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ac90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2aca0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2acb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2acc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2acd0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
2ace0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
2acf0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
2ad00 72 73 72 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  rsr );.  rc = sq
2ad10 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
2ad20 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
2ad30 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2ad40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2ad50 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
2ad60 7b 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c 69 74  {.    sz = sqlit
2ad70 65 33 42 74 72 65 65 52 6f 77 43 6f 75 6e 74 45  e3BtreeRowCountE
2ad80 73 74 28 70 43 72 73 72 29 3b 0a 20 20 20 20 69  st(pCrsr);.    i
2ad90 66 28 20 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29  f( ALWAYS(sz>=0)
2ada0 20 26 26 20 73 71 6c 69 74 65 33 4c 6f 67 45 73   && sqlite3LogEs
2adb0 74 28 28 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e  t((u64)sz)<pOp->
2adc0 70 33 20 29 20 72 65 73 20 3d 20 31 3b 0a 20 20  p3 ) res = 1;.  
2add0 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2ade0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
2adf0 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
2ae00 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
2ae10 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
2ae20 64 65 3a 20 53 6f 72 74 65 72 53 6f 72 74 20 50  de: SorterSort P
2ae30 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2ae40 20 41 66 74 65 72 20 61 6c 6c 20 72 65 63 6f 72   After all recor
2ae50 64 73 20 68 61 76 65 20 62 65 65 6e 20 69 6e 73  ds have been ins
2ae60 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 53  erted into the S
2ae70 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20  orter object.** 
2ae80 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 31  identified by P1
2ae90 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  , invoke this op
2aea0 63 6f 64 65 20 74 6f 20 61 63 74 75 61 6c 6c 79  code to actually
2aeb0 20 64 6f 20 74 68 65 20 73 6f 72 74 69 6e 67 2e   do the sorting.
2aec0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
2aed0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
2aee0 65 63 6f 72 64 73 20 74 6f 20 62 65 20 73 6f 72  ecords to be sor
2aef0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ted..**.** This 
2af00 6f 70 63 6f 64 65 20 69 73 20 61 6e 20 61 6c 69  opcode is an ali
2af10 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61  as for OP_Sort a
2af20 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20 74 68 61  nd OP_Rewind tha
2af30 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72  t is used.** for
2af40 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 73 2e   Sorter objects.
2af50 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2af60 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
2af70 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2af80 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
2af90 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
2afa0 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
2afb0 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
2afc0 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
2afd0 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
2afe0 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
2aff0 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
2b000 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
2b010 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
2b020 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
2b030 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
2b040 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
2b050 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
2b060 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
2b070 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
2b080 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
2b090 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
2b0a0 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
2b0b0 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
2b0c0 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
2b0d0 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
2b0e0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
2b0f0 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
2b100 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
2b110 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
2b120 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
2b130 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
2b140 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
2b150 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
2b160 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
2b170 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
2b180 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
2b190 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
2b1a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2b1b0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2b1c0 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
2b1d0 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
2b1e0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
2b1f0 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
2b200 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
2b210 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
2b220 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  ORT]++;.  /* Fal
2b230 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
2b240 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
2b250 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
2b260 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
2b270 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
2b280 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
2b290 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
2b2a0 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
2b2b0 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
2b2c0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
2b2d0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
2b2e0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
2b2f0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
2b300 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
2b310 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65  empty, jump imme
2b320 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2b330 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
2b340 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
2b350 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
2b360 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  gh to the follow
2b370 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ing .** instruct
2b380 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
2b390 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64   is non-zero and
2b3a0 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f   the table is no
2b3b0 74 20 65 6d 70 74 79 2c 20 74 68 65 6e 20 74 68  t empty, then th
2b3c0 65 20 22 73 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a  e "skip-next".**
2b3d0 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20   flag is set on 
2b3e0 74 68 65 20 63 75 72 73 6f 72 20 73 6f 20 74 68  the cursor so th
2b3f0 61 74 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4e  at the next OP_N
2b400 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
2b410 0a 2a 2a 20 65 78 65 63 75 74 65 64 20 6f 6e 20  .** executed on 
2b420 69 74 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  it is a no-op..*
2b430 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2b440 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
2b450 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
2b460 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
2b470 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
2b480 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
2b490 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
2b4a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2b4b0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
2b4c0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
2b4d0 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
2b4e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
2b4f0 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
2b500 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2b510 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
2b520 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
2b530 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
2b540 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2b550 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2b560 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2b570 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2b580 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2b590 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
2b5a0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
2b5b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
2b5c0 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
2b5d0 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
2b5e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
2b5f0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
2b600 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
2b610 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
2b620 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
2b630 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
2b640 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
2b650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2b660 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2b670 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2b680 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70  );.    pCrsr = p
2b690 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2b6a0 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
2b6b0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
2b6c0 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
2b6d0 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 23 69 66  Crsr, &res);.#if
2b6e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b6f0 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20  _WINDOWFUNC.    
2b700 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 73 71  if( pOp->p5 ) sq
2b710 6c 69 74 65 33 42 74 72 65 65 53 6b 69 70 4e 65  lite3BtreeSkipNe
2b720 78 74 28 70 43 72 73 72 29 3b 0a 23 65 6e 64 69  xt(pCrsr);.#endi
2b730 66 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  f.    pC->deferr
2b740 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
2b750 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2b760 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2b770 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
2b780 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2b790 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e  o_error;.  pC->n
2b7a0 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
2b7b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b7c0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
2b7d0 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62  <p->nOp );.  Vdb
2b7e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
2b7f0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
2b800 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
2b810 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2b820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
2b830 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2b840 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
2b850 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
2b860 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
2b870 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
2b880 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
2b890 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
2b8a0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
2b8b0 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
2b8c0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
2b8d0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2b8e0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2b8f0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
2b900 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
2b910 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
2b920 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
2b930 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
2b940 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
2b950 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
2b960 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
2b970 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
2b980 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
2b990 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
2b9a0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
2b9b0 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
2b9c0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
2b9d0 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
2b9e0 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
2b9f0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
2ba00 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
2ba10 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
2ba20 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
2ba30 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
2ba40 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
2ba50 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
2ba60 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
2ba70 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
2ba80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
2ba90 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
2baa0 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
2bab0 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
2bac0 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
2bad0 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
2bae0 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
2baf0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2bb00 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
2bb10 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
2bb20 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
2bb30 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
2bb40 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
2bb50 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
2bb60 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
2bb70 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
2bb80 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
2bb90 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
2bba0 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
2bbb0 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
2bbc0 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
2bbd0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
2bbe0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
2bbf0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
2bc00 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
2bc10 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
2bc20 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
2bc30 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
2bc40 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
2bc50 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20  lso: Prev.*/./* 
2bc60 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
2bc70 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2bc80 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
2bc90 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2bca0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
2bcb0 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
2bcc0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
2bcd0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
2bce0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
2bcf0 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
2bd00 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
2bd10 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
2bd20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
2bd30 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
2bd40 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
2bd50 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
2bd60 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
2bd70 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2bd80 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
2bd90 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2bda0 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
2bdb0 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
2bdc0 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
2bdd0 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
2bde0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
2bdf0 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
2be00 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
2be10 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
2be20 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
2be30 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
2be40 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
2be50 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
2be60 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
2be70 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
2be80 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
2be90 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
2bea0 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
2beb0 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
2bec0 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
2bed0 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
2bee0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
2bef0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
2bf00 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
2bf10 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
2bf20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
2bf30 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
2bf40 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
2bf50 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
2bf60 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
2bf70 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
2bf80 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
2bf90 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
2bfa0 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
2bfb0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
2bfc0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
2bfd0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
2bfe0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
2bff0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
2c000 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
2c010 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
2c020 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
2c030 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
2c040 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
2c050 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
2c060 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
2c070 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
2c080 3a 20 53 6f 72 74 65 72 4e 65 78 74 20 50 31 20  : SorterNext P1 
2c090 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
2c0a0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
2c0b0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e  s just like OP_N
2c0c0 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ext except that 
2c0d0 50 31 20 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20  P1 must be a.** 
2c0e0 73 6f 72 74 65 72 20 6f 62 6a 65 63 74 20 66 6f  sorter object fo
2c0f0 72 20 77 68 69 63 68 20 74 68 65 20 4f 50 5f 53  r which the OP_S
2c100 6f 72 74 65 72 53 6f 72 74 20 6f 70 63 6f 64 65  orterSort opcode
2c110 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76   has been.** inv
2c120 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f 70 63 6f  oked.  This opco
2c130 64 65 20 61 64 76 61 6e 63 65 73 20 74 68 65 20  de advances the 
2c140 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 6e 65  cursor to the ne
2c150 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63  xt sorted.** rec
2c160 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f  ord, or jumps to
2c170 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65   P2 if there are
2c180 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65 64 20   no more sorted 
2c190 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65  records..*/.case
2c1a0 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
2c1b0 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
2c1c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2c1d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c1e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c1f0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2c200 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
2c210 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
2c220 74 28 64 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74  t(db, pC);.  got
2c230 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73  o next_tail;.cas
2c240 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
2c250 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2c260 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20  ase OP_Next:    
2c270 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2c280 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c290 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2c2a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2c2b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2c2c0 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
2c2d0 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
2c2e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2c2f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2c300 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2c310 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2c320 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2c330 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2c340 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2c350 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2c360 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
2c370 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
2c380 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
2c390 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
2c3a0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c3b0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
2c3c0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
2c3d0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
2c3e0 69 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  ious );..  /* Th
2c3f0 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
2c400 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
2c410 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
2c420 20 52 65 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75   Rewind, and Fou
2c430 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
2c440 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
2c450 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
2c460 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
2c470 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
2c480 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2c490 4f 50 5f 4e 65 78 74 0a 20 20 20 20 20 20 20 7c  OP_Next.       |
2c4a0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2c4b0 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73  _SeekGT || pC->s
2c4c0 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45  eekOp==OP_SeekGE
2c4d0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2c4e0 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64  eekOp==OP_Rewind
2c4f0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2c500 4f 50 5f 46 6f 75 6e 64 20 0a 20 20 20 20 20 20  OP_Found .      
2c510 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2c520 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 20 20 61  OP_NullRow);.  a
2c530 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2c540 64 65 21 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20  de!=OP_Prev.    
2c550 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2c560 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70  ==OP_SeekLT || p
2c570 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2c580 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  ekLE.       || p
2c590 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61  C->seekOp==OP_La
2c5a0 73 74 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  st .       || pC
2c5b0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c  ->seekOp==OP_Nul
2c5c0 6c 52 6f 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70  lRow);..  rc = p
2c5d0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
2c5e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
2c5f0 70 4f 70 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74  pOp->p3);.next_t
2c600 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
2c610 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
2c620 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
2c630 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
2c640 54 45 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20  TE_OK,2);.  if( 
2c650 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2c660 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
2c670 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f   = 0;.    p->aCo
2c680 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b  unter[pOp->p5]++
2c690 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2c6a0 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
2c6b0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
2c6c0 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f  .#endif.    goto
2c6d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
2c6e0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2c6f0 75 70 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  upt;.  }.  if( r
2c700 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c!=SQLITE_DONE )
2c710 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c720 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d  to_error;.  rc =
2c730 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43   SQLITE_OK;.  pC
2c740 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
2c750 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2c760 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2c770 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
2c780 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
2c790 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2c7a0 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52  ey=r[P2].**.** R
2c7b0 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
2c7c0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
2c7d0 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
2c7e0 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
2c7f0 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
2c800 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
2c810 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
2c820 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
2c830 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
2c840 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
2c850 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a  * If P4 is not z
2c860 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
2c870 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
2c880 6c 75 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61  lues in the unpa
2c890 63 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72  cked.** key of r
2c8a0 65 67 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74  eg(P2).  In that
2c8b0 20 63 61 73 65 2c 20 50 33 20 69 73 20 74 68 65   case, P3 is the
2c8c0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69   index of the fi
2c8d0 72 73 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  rst register.** 
2c8e0 66 6f 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64  for the unpacked
2c8f0 20 6b 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c   key.  The avail
2c900 61 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75  ability of the u
2c910 6e 70 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20  npacked key can 
2c920 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20  sometimes.** be 
2c930 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
2c940 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
2c950 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45   the OPFLAG_APPE
2c960 4e 44 20 62 69 74 20 73 65 74 2c 20 74 68 61 74  ND bit set, that
2c970 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2c980 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a  e b-tree layer.*
2c990 2a 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 65  * that this inse
2c9a0 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
2c9b0 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
2c9c0 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
2c9d0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
2c9e0 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
2c9f0 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2ca00 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  r is.** incremen
2ca10 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  ted by this inst
2ca20 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
2ca30 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2ca40 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a  bit is clear,.**
2ca50 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
2ca60 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68   counter is unch
2ca70 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anged..**.** If 
2ca80 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
2ca90 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
2caa0 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20   P5 is set, the 
2cab0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
2cac0 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74  ight.** run fast
2cad0 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61  er by avoiding a
2cae0 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65  n unnecessary se
2caf0 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  ek on cursor P1.
2cb00 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68    However,.** th
2cb10 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
2cb20 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74  RESULT flag must
2cb30 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
2cb40 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20  there have been 
2cb50 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b  no prior.** seek
2cb60 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  s on the cursor 
2cb70 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72  or if the most r
2cb80 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20  ecent seek used 
2cb90 61 20 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74  a key equivalent
2cba0 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  .** to P2. .**.*
2cbb0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
2cbc0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  on only works fo
2cbd0 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20  r indices.  The 
2cbe0 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
2cbf0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61  uction.** for ta
2cc00 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72  bles is OP_Inser
2cc10 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
2cc20 20 53 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31   SorterInsert P1
2cc30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2cc40 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
2cc50 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2cc60 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
2cc70 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
2cc80 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
2cc90 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
2cca0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
2ccb0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
2ccc0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f  y.** into the so
2ccd0 72 74 65 72 20 50 31 2e 20 20 44 61 74 61 20 66  rter P1.  Data f
2cce0 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
2ccf0 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nil..*/.case OP_
2cd00 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20  SorterInsert:   
2cd10 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61      /* in2 */.ca
2cd20 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a  se OP_IdxInsert:
2cd30 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
2cd40 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2cd50 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79   *pC;.  BtreePay
2cd60 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72  load x;..  asser
2cd70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2cd80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2cd90 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2cda0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2cdb0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2cdc0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2cdd0 2c 20 70 43 29 3b 0a 20 20 61 73 73 65 72 74 28  , pC);.  assert(
2cde0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2cdf0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2ce00 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
2ce10 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
2ce20 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
2ce30 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2ce40 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
2ce50 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
2ce60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
2ce70 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2ce80 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
2ce90 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2cea0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2ceb0 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  BTREE || pOp->op
2cec0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2ced0 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72  nsert );.  asser
2cee0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
2cef0 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
2cf00 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
2cf10 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2cf20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2cf30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
2cf40 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2cf50 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d  sert ){.    rc =
2cf60 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2cf70 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
2cf80 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2cf90 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e  x.nKey = pIn2->n
2cfa0 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70  ;.    x.pKey = p
2cfb0 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d  In2->z;.    x.aM
2cfc0 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d  em = aMem + pOp-
2cfd0 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20  >p3;.    x.nMem 
2cfe0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
2cff0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2d000 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
2d010 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
2d020 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d  ,.         (pOp-
2d030 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
2d040 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
2d050 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20  POSITION)), .   
2d060 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
2d070 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2d080 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
2d090 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
2d0a0 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65       );.    asse
2d0b0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2d0c0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
2d0d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2d0e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2d0f0 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f    }.  if( rc) go
2d100 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2d110 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2d120 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2d130 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
2d140 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2d150 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
2d160 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
2d170 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
2d180 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
2d190 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
2d1a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2d1b0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
2d1c0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
2d1d0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
2d1e0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
2d1f0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
2d200 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
2d210 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
2d220 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2d230 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2d240 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2d250 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2d260 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2d270 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2d280 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
2d290 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
2d2a0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
2d2b0 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  or)+1 );.  asser
2d2c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2d2d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2d2e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2d2f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2d300 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2d310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2d320 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2d330 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 73  YPE_BTREE );.  s
2d340 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
2d350 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
2d360 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
2d370 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
2d380 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
2d390 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2d3a0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70  ->p5==0 );.  r.p
2d3b0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
2d3c0 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
2d3d0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
2d3e0 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  3;.  r.default_r
2d3f0 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20  c = 0;.  r.aMem 
2d400 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2d410 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2d420 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
2d430 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
2d440 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
2d450 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2d460 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2d470 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
2d480 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d490 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
2d4a0 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45  r, BTREE_AUXDELE
2d4b0 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  TE);.    if( rc 
2d4c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2d4d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2d4e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2d4f0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2d500 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2d510 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2d520 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  E;.  pC->seekRes
2d530 75 6c 74 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ult = 0;.  break
2d540 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d550 44 65 66 65 72 72 65 64 53 65 65 6b 20 50 31 20  DeferredSeek P1 
2d560 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  * P3 P4 *.** Syn
2d570 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33 20 74  opsis: Move P3 t
2d580 6f 20 50 31 2e 72 6f 77 69 64 20 69 66 20 6e 65  o P1.rowid if ne
2d590 65 64 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  eded.**.** P1 is
2d5a0 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20 63   an open index c
2d5b0 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69 73 20  ursor and P3 is 
2d5c0 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20  a cursor on the 
2d5d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
2d5e0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6f 70   table.  This op
2d5f0 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65 66 65  code does a defe
2d600 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74 68 65  rred seek of the
2d610 20 50 33 20 74 61 62 6c 65 20 63 75 72 73 6f 72   P3 table cursor
2d620 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74  .** to the row t
2d630 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
2d640 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  to the current r
2d650 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ow of P1..**.** 
2d660 54 68 69 73 20 69 73 20 61 20 64 65 66 65 72 72  This is a deferr
2d670 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e  ed seek.  Nothin
2d680 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65  g actually happe
2d690 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20  ns until.** the 
2d6a0 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74  cursor is used t
2d6b0 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e  o read a record.
2d6c0 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e    That way, if n
2d6d0 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72  o reads.** occur
2d6e0 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79  , no unnecessary
2d6f0 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a   I/O happens..**
2d700 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 6e  .** P4 may be an
2d710 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
2d720 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e 54 41  rs (type P4_INTA
2d730 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67  RRAY) containing
2d740 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f  .** one entry fo
2d750 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
2d760 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e 20 20   the P3 table.  
2d770 49 66 20 61 72 72 61 79 20 65 6e 74 72 79 20 61  If array entry a
2d780 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65  (i).** is non-ze
2d790 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67  ro, then reading
2d7a0 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66   column a(i)-1 f
2d7b0 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73  rom cursor P3 is
2d7c0 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20   .** equivalent 
2d7d0 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68  to performing th
2d7e0 65 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20  e deferred seek 
2d7f0 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67  and then reading
2d800 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72   column i .** fr
2d810 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69 6e 66  om P1.  This inf
2d820 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72  ormation is stor
2d830 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75 73 65  ed in P3 and use
2d840 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a  d to redirect.**
2d850 20 72 65 61 64 73 20 61 67 61 69 6e 73 74 20 50   reads against P
2d860 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20 74 68  3 over to P1, th
2d870 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76 6f 69  us possibly avoi
2d880 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20 74 6f  ding the need to
2d890 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72 65 61  .** seek and rea
2d8a0 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a  d cursor P3..*/.
2d8b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
2d8c0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
2d8d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2d8e0 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57  2]=rowid.**.** W
2d8f0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
2d900 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
2d910 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
2d920 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
2d930 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
2d940 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
2d950 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
2d960 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
2d970 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
2d980 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
2d990 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2d9a0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
2d9b0 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
2d9c0 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
2d9d0 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
2d9e0 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
2d9f0 61 73 65 20 4f 50 5f 44 65 66 65 72 72 65 64 53  ase OP_DeferredS
2da00 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78  eek:.case OP_Idx
2da10 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
2da20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2da30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
2da40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2da50 68 65 20 50 31 20 69 6e 64 65 78 20 63 75 72 73  he P1 index curs
2da60 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  or */.  VdbeCurs
2da70 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20  or *pTabCur;    
2da80 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20 74 61      /* The P2 ta
2da90 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50 5f 44  ble cursor (OP_D
2daa0 65 66 65 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79  eferredSeek only
2dab0 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  ) */.  i64 rowid
2dac0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2dad0 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74     /* Rowid that
2dae0 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e   P1 current poin
2daf0 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ts to */..  asse
2db00 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2db10 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2db20 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2db30 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2db40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2db50 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2db60 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2db70 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2db80 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
2db90 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
2dba0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
2dbb0 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
2dbc0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2dbd0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2dbe0 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52  sert( !pC->nullR
2dbf0 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ow || pOp->opcod
2dc00 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29  e==OP_IdxRowid )
2dc10 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52  ;..  /* The IdxR
2dc20 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70  owid and Seek op
2dc30 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e  codes are combin
2dc40 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 74 68  ed because of th
2dc50 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20  e commonality.  
2dc60 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62  ** of sqlite3Vdb
2dc70 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2dc80 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
2dc90 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20  IdxRowid(). */. 
2dca0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2dcb0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
2dcc0 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65  C);..  /* sqlite
2dcd0 33 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  3VbeCursorRestor
2dce0 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69  e() can only fai
2dcf0 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  l if the record 
2dd00 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64  has been deleted
2dd10 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75  .  ** out from u
2dd20 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e  nder the cursor.
2dd30 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65    That will neve
2dd40 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e  r happens for an
2dd50 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f   IdxRowid.  ** o
2dd60 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f  r Seek opcode */
2dd70 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
2dd80 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
2dd90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2dda0 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70  error;..  if( !p
2ddb0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
2ddc0 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a    rowid = 0;  /*
2ddd0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2dde0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2ddf0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2de00 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2de10 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
2de20 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  , pC->uc.pCursor
2de30 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69  , &rowid);.    i
2de40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
2de50 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
2de60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2de70 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
2de80 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2de90 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20 29 7b  _DeferredSeek ){
2dea0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2deb0 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
2dec0 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p3<p->nCursor 
2ded0 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2dee0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2def0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65  >p3];.      asse
2df00 72 74 28 20 70 54 61 62 43 75 72 21 3d 30 20 29  rt( pTabCur!=0 )
2df10 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2df20 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70  pTabCur->eCurTyp
2df30 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2df40 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2df50 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43  ( pTabCur->uc.pC
2df60 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
2df70 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2df80 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  r->isTable );.  
2df90 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c      pTabCur->nul
2dfa0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  lRow = 0;.      
2dfb0 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54  pTabCur->movetoT
2dfc0 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20  arget = rowid;. 
2dfd0 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65       pTabCur->de
2dfe0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
2dff0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2e000 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2e010 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d  INTARRAY || pOp-
2e020 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20  >p4.ai==0 );.   
2e030 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74     pTabCur->aAlt
2e040 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  Map = pOp->p4.ai
2e050 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2e060 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43  >pAltCursor = pC
2e070 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2e080 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72     pOut = out2Pr
2e090 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2e0a0 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  ;.      pOut->u.
2e0b0 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  i = rowid;.    }
2e0c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2e0d0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2e0e0 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29  e==OP_IdxRowid )
2e0f0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2e100 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65  eMemSetNull(&aMe
2e110 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d  m[pOp->p2]);.  }
2e120 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e130 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31  Opcode: IdxGE P1
2e140 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2e150 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2e160 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2e170 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2e180 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2e190 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2e1a0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2e1b0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2e1c0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
2e1d0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e1e0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e1f0 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
2e200 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2e210 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2e220 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2e230 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
2e240 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
2e250 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
2e260 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
2e270 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
2e280 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
2e290 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
2e2a0 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
2e2b0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
2e2c0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2e2d0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2e2e0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
2e2f0 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20 50  e: IdxGT P1 P2 P
2e300 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2e310 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2e320 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2e330 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2e340 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2e350 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2e360 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2e370 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2e380 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
2e390 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2e3a0 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
2e3b0 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
2e3c0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
2e3d0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
2e3e0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
2e3f0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
2e400 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
2e410 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
2e420 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2e430 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2e440 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a   the key value.*
2e450 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  * then jump to P
2e460 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61  2.  Otherwise fa
2e470 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2e480 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2e490 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
2e4a0 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33  : IdxLT P1 P2 P3
2e4b0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2e4c0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2e4d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2e4e0 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2e4f0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2e500 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2e510 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2e520 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2e530 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
2e540 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
2e550 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
2e560 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
2e570 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2e580 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2e590 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2e5a0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
2e5b0 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
2e5c0 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
2e5d0 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2e5e0 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
2e5f0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
2e600 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2e610 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61  .** Otherwise fa
2e620 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2e630 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2e640 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
2e650 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50 33  : IdxLE P1 P2 P3
2e660 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2e670 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2e680 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2e690 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2e6a0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2e6b0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2e6c0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2e6d0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2e6e0 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
2e6f0 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
2e700 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
2e710 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  nst.** the index
2e720 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2e730 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2e740 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2e750 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a  PRIMARY KEY or.*
2e760 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50  * ROWID on the P
2e770 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49  1 index..**.** I
2e780 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2e790 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61  ntry is less tha
2e7a0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
2e7b0 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
2e7c0 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
2e7d0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2e7e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2e7f0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2e800 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45  */.case OP_IdxLE
2e810 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2e820 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2e830 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xGT:          /*
2e840 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2e850 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20  _IdxLT:         
2e860 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2e870 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20   OP_IdxGE:  {   
2e880 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2e890 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2e8a0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
2e8b0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
2e8c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e8d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e8e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2e8f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2e900 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2e910 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2e920 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
2e930 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
2e940 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2e950 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2e960 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2e970 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20  .pCursor!=0);.  
2e980 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2e990 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2e9a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e9b0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
2e9c0 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
2e9d0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2e9e0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b  _INT32 );.  r.pK
2e9f0 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
2ea00 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
2ea10 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
2ea20 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  .i;.  if( pOp->o
2ea30 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29  pcode<OP_IdxLT )
2ea40 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2ea50 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2ea60 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xLE || pOp->opco
2ea70 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
2ea80 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
2ea90 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
2eaa0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2eab0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2eac0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2ead0 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2eae0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2eaf0 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d   0;.  }.  r.aMem
2eb00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2eb10 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
2eb20 5f 44 45 42 55 47 0a 20 20 7b 0a 20 20 20 20 69  _DEBUG.  {.    i
2eb30 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
2eb40 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
2eb50 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
2eb60 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
2eb70 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  .aMem[i]) );.   
2eb80 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
2eb90 45 28 70 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d  E(pOp->p3+i, &aM
2eba0 65 6d 5b 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a  em[pOp->p3+i]);.
2ebb0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
2ebc0 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
2ebd0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2ebe0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2ebf0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2ec00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2ec10 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
2ec20 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
2ec30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
2ec40 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
2ec50 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
2ec60 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
2ec70 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
2ec80 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
2ec90 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
2eca0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2ecb0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2ecc0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2ecd0 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2ece0 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
2ecf0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2ed00 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2ed10 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2ed20 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2ed30 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
2ed40 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2ed50 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
2ed60 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2ed70 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2ed80 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  or;.  if( res>0 
2ed90 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2eda0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2edb0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
2edc0 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
2edd0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
2ede0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
2edf0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2ee00 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
2ee10 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2ee20 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2ee30 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
2ee40 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
2ee50 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
2ee60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2ee70 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
2ee80 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
2ee90 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2eea0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2eeb0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2eec0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2eed0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2eee0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2eef0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2ef00 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2ef10 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
2ef20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
2ef30 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2ef40 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
2ef50 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
2ef60 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
2ef70 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
2ef80 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
2ef90 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
2efa0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
2efb0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
2efc0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
2efd0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
2efe0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
2eff0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
2f000 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
2f010 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
2f020 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
2f030 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2f040 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49 66   register P2. If
2f050 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e   no page movemen
2f060 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
2f070 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74  because the.** t
2f080 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
2f090 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 74  ed was already t
2f0a0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2f0b0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2f0c0 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20  n a .** zero is 
2f0d0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2f0e0 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56  er P2.  If AUTOV
2f0f0 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
2f100 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a  d then a zero .*
2f110 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2f120 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2f130 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68  * This opcode th
2f140 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2f150 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
2f160 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d 73  ctive reader VMs
2f170 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69   when.** it is i
2f180 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20  nvoked. This is 
2f190 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68  done to avoid th
2f1a0 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73 73  e difficulty ass
2f1b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a  ociated with .**
2f1c0 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74 69   updating existi
2f1d0 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20  ng cursors when 
2f1e0 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d  a root page is m
2f1f0 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56  oved in an AUTOV
2f200 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61  ACUUM .** databa
2f210 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69  se. This error i
2f220 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66  s thrown even if
2f230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2f240 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55   not an AUTOVACU
2f250 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64  UM .** db in ord
2f260 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72  er to avoid intr
2f270 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d  oducing an incom
2f280 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77 65  patibility betwe
2f290 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a  en autovacuum .*
2f2a0 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61  * and non-autova
2f2b0 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a  cuum modes..**.*
2f2c0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
2f2d0 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
2f2e0 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
2f2f0 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
2f300 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
2f310 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2f320 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2f330 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  , 0);.  assert( 
2f340 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2f350 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2f360 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20  >p1>1 );.  pOut 
2f370 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2f380 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
2f390 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
2f3a0 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56  ll;.  if( db->nV
2f3b0 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56  dbeRead > db->nV
2f3c0 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20  Destroy+1 ){.   
2f3d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
2f3e0 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
2f3f0 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
2f400 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  rt;.    goto abo
2f410 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2f420 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
2f430 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
2f440 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2f450 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2f460 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d  , iDb) );.    iM
2f470 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  oved = 0;  /* No
2f480 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2f490 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2f4a0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2f4b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
2f4c0 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
2f4d0 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
2f4e0 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
2f4f0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2f500 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
2f510 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
2f520 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2f530 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2f540 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51  rror;.#ifndef SQ
2f550 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
2f560 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f  CUUM.    if( iMo
2f570 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
2f580 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2f590 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d  oved(db, iDb, iM
2f5a0 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
2f5b0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f        /* All OP_
2f5c0 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
2f5d0 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  ns occur on the 
2f5e0 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20  same btree */.  
2f5f0 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65      assert( rese
2f600 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
2f610 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61  0 || resetSchema
2f620 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29  OnFault==iDb+1 )
2f630 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
2f640 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62  emaOnFault = iDb
2f650 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  +1;.    }.#endif
2f660 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f670 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61  ./* Opcode: Clea
2f680 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  r P1 P2 P3.**.**
2f690 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2f6a0 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
2f6b0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
2f6c0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
2f6d0 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61  age.** in the da
2f6e0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67  tabase file is g
2f6f0 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74  iven by P1.  But
2f700 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79  , unlike Destroy
2f710 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f  , do not.** remo
2f720 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ve the table or 
2f730 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64  index from the d
2f740 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2f750 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
2f760 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20  ing clear is in 
2f770 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2f780 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e  e file if P2==0.
2f790 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68    If.** P2==1 th
2f7a0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
2f7b0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
2f7c0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
2f7d0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
2f7e0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
2f7f0 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
2f800 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
2f810 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
2f820 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20  **.** If the P3 
2f830 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
2f840 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  o, then the tabl
2f850 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75  e referred to mu
2f860 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b  st be an.** intk
2f870 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c  ey table (an SQL
2f880 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69   table, not an i
2f890 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63  ndex). In this c
2f8a0 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e  ase the row chan
2f8b0 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20  ge .** count is 
2f8c0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2f8d0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2f8e0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
2f8f0 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a  eing cleared. .*
2f900 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74  * If P3 is great
2f910 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
2f920 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  en the value sto
2f930 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2f940 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e  P3 is.** also in
2f950 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2f960 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2f970 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2f980 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a  ng cleared..**.*
2f990 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
2f9a0 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
2f9b0 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43  lear: {.  int nC
2f9c0 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74  hange;. .  sqlit
2f9d0 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
2f9e0 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
2f9f0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
2fa00 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2fa10 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2fa20 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2fa30 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2fa40 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  >p2) );.  rc = s
2fa50 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2fa60 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d  Table(.      db-
2fa70 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42  >aDb[pOp->p2].pB
2fa80 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70  t, pOp->p1, (pOp
2fa90 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20  ->p3 ? &nChange 
2faa0 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20  : 0).  );.  if( 
2fab0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70  pOp->p3 ){.    p
2fac0 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68  ->nChange += nCh
2fad0 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  ange;.    if( pO
2fae0 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20  p->p3>0 ){.     
2faf0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2fb00 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
2fb10 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  3]) );.      mem
2fb20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2fb30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
2fb40 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70  ;.      aMem[pOp
2fb50 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
2fb60 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
2fb70 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2fb80 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2fb90 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2fba0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
2fbb0 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20  Sorter P1 * * * 
2fbc0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2fbd0 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d  ll contents from
2fbe0 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
2fbf0 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a  able or sorter.*
2fc00 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f  * that is open o
2fc10 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a  n cursor P1..**.
2fc20 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  ** This opcode o
2fc30 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75  nly works for cu
2fc40 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73  rsors used for s
2fc50 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70  orting and.** op
2fc60 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65  ened with OP_Ope
2fc70 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50  nEphemeral or OP
2fc80 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a  _SorterOpen..*/.
2fc90 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72  case OP_ResetSor
2fca0 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ter: {.  VdbeCur
2fcb0 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73  sor *pC;. .  ass
2fcc0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2fcd0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2fce0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2fcf0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2fd00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2fd10 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f  =0 );.  if( isSo
2fd20 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
2fd30 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2fd40 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75  rReset(db, pC->u
2fd50 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65  c.pSorter);.  }e
2fd60 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2fd70 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2fd80 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2fd90 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2fda0 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
2fdb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2fdc0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66  treeClearTableOf
2fdd0 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
2fde0 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20  ursor);.    if( 
2fdf0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2fe00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2fe10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2fe20 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 42   Opcode: CreateB
2fe30 74 72 65 65 20 50 31 20 50 32 20 50 33 20 2a 20  tree P1 P2 P3 * 
2fe40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2fe50 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
2fe60 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20   flags=P3.**.** 
2fe70 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 62  Allocate a new b
2fe80 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d 61 69  -tree in the mai
2fe90 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2fea0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
2feb0 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61 62  he.** TEMP datab
2fec0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2fed0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
2fee0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
2fef0 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20 50 33  ** P1>1.  The P3
2ff00 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62   argument must b
2ff10 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54 4b 45  e 1 (BTREE_INTKE
2ff20 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74  Y) for a rowid t
2ff30 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20  able.** it must 
2ff40 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c 4f 42  be 2 (BTREE_BLOB
2ff50 4b 45 59 29 20 66 6f 72 20 61 6e 20 69 6e 64 65  KEY) for an inde
2ff60 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57  x or WITHOUT ROW
2ff70 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  ID table..** The
2ff80 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2ff90 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62 2d 74  r of the new b-t
2ffa0 72 65 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ree is stored in
2ffb0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
2ffc0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 42  .case OP_CreateB
2ffd0 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tree: {         
2ffe0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
2fff0 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44  t pgno;.  Db *pD
30000 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  b;..  sqlite3Vdb
30010 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
30020 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20  r(p, 0);.  pOut 
30030 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
30040 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
30050 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
30060 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49  pOp->p3==BTREE_I
30070 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33  NTKEY || pOp->p3
30080 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  ==BTREE_BLOBKEY 
30090 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
300a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
300b0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
300c0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
300d0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
300e0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
300f0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
30100 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
30110 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
30120 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
30130 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72  b->pBt!=0 );.  r
30140 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
30150 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
30160 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70  >pBt, &pgno, pOp
30170 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p3);.  if( rc 
30180 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
30190 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
301a0 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20  t->u.i = pgno;. 
301b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
301c0 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20  code: SqlExec * 
301d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
301e0 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  un the SQL state
301f0 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e  ment or statemen
30200 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
30210 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
30220 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65  /.case OP_SqlExe
30230 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  c: {.  sqlite3Vd
30240 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
30250 65 72 28 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e  er(p, 0);.  db->
30260 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63  nSqlExec++;.  rc
30270 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
30280 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30  db, pOp->p4.z, 0
30290 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e  , 0, 0);.  db->n
302a0 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28  SqlExec--;.  if(
302b0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
302c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
302d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
302e0 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d  code: ParseSchem
302f0 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  a P1 * * P4 *.**
30300 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72  .** Read and par
30310 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  se all entries f
30320 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  rom the SQLITE_M
30330 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64  ASTER table of d
30340 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68  atabase P1.** th
30350 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45  at match the WHE
30360 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 20 49  RE clause P4.  I
30370 66 20 50 34 20 69 73 20 61 20 4e 55 4c 4c 20 70  f P4 is a NULL p
30380 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65  ointer, then the
30390 0a 2a 2a 20 65 6e 74 69 72 65 20 73 63 68 65 6d  .** entire schem
303a0 61 20 66 6f 72 20 50 31 20 69 73 20 72 65 70 61  a for P1 is repa
303b0 72 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rsed..**.** This
303c0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
303d0 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
303e0 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
303f0 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
30400 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
30410 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
30420 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
30430 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
30440 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
30450 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
30460 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
30470 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
30480 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
30490 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
304a0 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
304b0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
304c0 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
304d0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
304e0 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
304f0 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
30500 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
30510 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
30520 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
30530 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
30540 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
30550 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
30560 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
30570 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
30580 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
30590 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
305a0 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
305b0 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
305c0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
305d0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
305e0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
305f0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
30600 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
30610 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
30620 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
30630 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
30640 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
30650 4c 45 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  LE.  if( pOp->p4
30660 2e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  .z==0 ){.    sql
30670 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
30680 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63  db->aDb[iDb].pSc
30690 68 65 6d 61 29 3b 0a 20 20 20 20 64 62 2d 3e 6d  hema);.    db->m
306a0 44 62 46 6c 61 67 73 20 26 3d 20 7e 44 42 46 4c  DbFlags &= ~DBFL
306b0 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b  AG_SchemaKnownOk
306c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
306d0 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 44  e3InitOne(db, iD
306e0 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  b, &p->zErrMsg, 
306f0 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54 61  INITFLAG_AlterTa
30700 62 6c 65 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44  ble);.    db->mD
30710 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47  bFlags |= DBFLAG
30720 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  _SchemaChange;. 
30730 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
30740 30 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  0;.  }else.#endi
30750 66 0a 20 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65  f.  {.    zMaste
30760 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  r = MASTER_NAME;
30770 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
30780 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
30790 61 74 61 2e 69 44 62 20 3d 20 69 44 62 3b 0a 20  ata.iDb = iDb;. 
307a0 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
307b0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
307c0 73 67 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  sg;.    initData
307d0 2e 6d 49 6e 69 74 46 6c 61 67 73 20 3d 20 30 3b  .mInitFlags = 0;
307e0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
307f0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
30800 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
30810 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
30820 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
30830 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
30840 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
30850 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62  db->aDb[iDb].zDb
30860 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  SName, zMaster, 
30870 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
30880 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
30890 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
308a0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20  _NOMEM_BKPT;.   
308b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
308c0 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
308d0 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
308e0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
308f0 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
30900 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
30910 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
30920 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
30930 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
30940 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
30950 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
30960 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
30970 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
30980 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30990 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
309a0 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
309b0 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c  ite3DbFreeNN(db,
309c0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
309d0 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
309e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
309f0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
30a00 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
30a10 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
30a20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
30a30 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
30a40 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
30a50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
30a60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
30a70 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
30a80 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  ;  .}..#if !defi
30a90 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
30aa0 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f  ANALYZE)./* Opco
30ab0 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73  de: LoadAnalysis
30ac0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
30ad0 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74  * Read the sqlit
30ae0 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f  e_stat1 table fo
30af0 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  r database P1 an
30b00 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65  d load the conte
30b10 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  nt.** of that ta
30b20 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ble into the int
30b30 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68  ernal index hash
30b40 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69   table.  This wi
30b50 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20  ll cause.** the 
30b60 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75  analysis to be u
30b70 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69  sed when prepari
30b80 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  ng all subsequen
30b90 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61  t queries..*/.ca
30ba0 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73  se OP_LoadAnalys
30bb0 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  is: {.  assert( 
30bc0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
30bd0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
30be0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
30bf0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20  nalysisLoad(db, 
30c00 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
30c10 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
30c20 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
30c30 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
30c40 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
30c50 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
30c60 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
30c70 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
30c80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
30c90 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
30ca0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
30cb0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
30cc0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
30cd0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
30ce0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
30cf0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
30d00 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
30d10 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
30d20 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
30d30 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
30d40 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
30d50 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
30d60 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
30d70 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
30d80 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
30d90 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
30da0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
30db0 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
30dc0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
30dd0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
30de0 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
30df0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
30e00 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
30e10 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
30e20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
30e30 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
30e40 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
30e50 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
30e60 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
30e70 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
30e80 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
30e90 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
30ea0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
30eb0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
30ec0 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
30ed0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
30ee0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
30ef0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
30f00 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
30f10 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
30f20 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
30f30 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
30f40 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
30f50 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
30f60 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
30f70 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
30f80 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
30f90 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
30fa0 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ;.  sqlite3Unlin
30fb0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
30fc0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
30fd0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
30fe0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
30ff0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
31000 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
31010 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
31020 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
31030 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
31040 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
31050 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
31060 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
31070 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
31080 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
31090 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
310a0 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
310b0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
310c0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
310d0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
310e0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
310f0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
31100 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
31110 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
31120 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
31130 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
31140 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
31150 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
31160 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  r(p, 0);.  sqlit
31170 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
31180 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
31190 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
311a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
311b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
311c0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
311d0 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
311e0 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
311f0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44  P3 P4 P5.**.** D
31200 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
31210 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
31220 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
31230 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
31240 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
31250 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
31260 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
31270 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
31280 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
31290 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
312a0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
312b0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
312c0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
312d0 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74  tains one less t
312e0 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
312f0 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
31300 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
31310 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
31320 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
31330 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
31340 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
31350 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
31360 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
31370 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
31380 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
31390 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
313a0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
313b0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
313c0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
313d0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
313e0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
313f0 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
31400 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ers.** stored in
31410 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67   P4_INTARRAY arg
31420 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ument..**.** If 
31430 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
31440 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
31450 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
31460 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
31470 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
31480 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
31490 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
314a0 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
314b0 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
314c0 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
314d0 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
314e0 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
314f0 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
31500 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
31510 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
31520 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
31530 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
31540 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
31550 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
31560 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
31570 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
31580 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  d */.  int nErr;
31590 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
315a0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
315b0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
315c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
315d0 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
315e0 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
315f0 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
31600 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
31610 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
31620 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
31630 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
31640 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
31650 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74  pOp->p2;.  aRoot
31660 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
31670 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
31680 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52   );.  assert( aR
31690 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b  oot[0]==nRoot );
316a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
316b0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
316c0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
316d0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
316e0 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
316f0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
31700 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
31710 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
31720 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
31730 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31740 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
31750 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
31760 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
31770 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
31780 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
31790 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
317a0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
317b0 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73  ->p5) );.  z = s
317c0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
317d0 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
317e0 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
317f0 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74  &aRoot[1], nRoot
31800 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
31830 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20  .i+1, &nErr);.  
31840 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
31850 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
31860 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
31870 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
31880 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
31890 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
318a0 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
318b0 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d      pnErr->u.i -
318c0 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71  = nErr-1;.    sq
318d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
318e0 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
318f0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
31900 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
31910 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
31920 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
31930 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31940 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
31950 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
31960 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31970 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
31980 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
31990 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
319a0 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
319b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77  ** Synopsis: row
319c0 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
319d0 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
319e0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
319f0 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
31a00 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f   into a RowSet o
31a10 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e  bject.** held in
31a20 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
31a30 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
31a40 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
31a50 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
31a60 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
31a70 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
31a80 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
31a90 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
31aa0 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
31ab0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
31ac0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
31ad0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
31ae0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
31af0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
31b00 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Blob)==0 ){.    
31b10 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
31b20 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
31b30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
31b40 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73  .  }.  assert( s
31b50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52  qlite3VdbeMemIsR
31b60 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20  owSet(pIn1) );. 
31b70 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
31b80 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70 49  sert((RowSet*)pI
31b90 6e 31 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 75 2e 69  n1->z, pIn2->u.i
31ba0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
31bb0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
31bc0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
31bd0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
31be0 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a  [P3]=rowset(P1).
31bf0 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
31c00 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
31c10 20 66 72 6f 6d 20 74 68 65 20 52 6f 77 53 65 74   from the RowSet
31c20 20 6f 62 6a 65 63 74 20 69 6e 20 50 31 0a 2a 2a   object in P1.**
31c30 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
31c40 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
31c50 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20  r P3..** Or, if 
31c60 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 50 31  RowSet object P1
31c70 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
31c80 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
31c90 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
31ca0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
31cb0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
31cc0 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
31cd0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
31ce0 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
31cf0 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d  4 val;..  pIn1 =
31d00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
31d10 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
31d20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
31d30 6f 62 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65  ob)==0 || sqlite
31d40 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74  3VdbeMemIsRowSet
31d50 28 70 49 6e 31 29 20 29 3b 0a 20 20 69 66 28 20  (pIn1) );.  if( 
31d60 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
31d70 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 0a 20 20 20  EM_Blob)==0 .   
31d80 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
31d90 4e 65 78 74 28 28 52 6f 77 53 65 74 2a 29 70 49  Next((RowSet*)pI
31da0 6e 31 2d 3e 7a 2c 20 26 76 61 6c 29 3d 3d 30 0a  n1->z, &val)==0.
31db0 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
31dc0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
31dd0 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
31de0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
31df0 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56  ull(pIn1);.    V
31e00 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
31e10 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ,2);.    goto ju
31e20 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
31e30 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
31e40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
31e50 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
31e60 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
31e70 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42  dex */.    VdbeB
31e80 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b  ranchTaken(0,2);
31e90 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
31ea0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
31eb0 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
31ec0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
31ed0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
31ee0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31ef0 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
31f00 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
31f10 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
31f20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
31f30 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
31f40 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
31f50 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
31f60 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
31f70 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
31f80 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
31f90 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
31fa0 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
31fb0 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
31fc0 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
31fd0 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
31fe0 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
31ff0 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
32000 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
32010 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
32020 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
32030 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
32040 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
32050 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
32060 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
32070 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
32080 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a  ets of integers.
32090 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64 20  ** are inserted 
320a0 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61 73  in distinct phas
320b0 65 73 2c 20 77 68 69 63 68 20 65 61 63 68 20 73  es, which each s
320c0 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
320d0 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61  uplicates..** Ea
320e0 63 68 20 73 65 74 20 69 73 20 69 64 65 6e 74 69  ch set is identi
320f0 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
32100 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
32110 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
32120 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
32130 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20   final set must 
32140 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64  have P4==-1, and
32150 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73   for all other s
32160 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  ets.** must have
32170 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   P4>0..**.** Thi
32180 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
32190 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
321a0 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
321b0 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
321c0 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62  ** the RowSet ob
321d0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
321e0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
321f0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
32200 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
32210 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
32220 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
32230 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
32240 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
32250 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
32260 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
32270 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
32280 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
32290 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
322a0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
322b0 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
322c0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
322d0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
322e0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
322f0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
32300 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
32310 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
32320 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
32330 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
32340 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
32350 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
32360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
32370 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
32380 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
32390 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
323a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
323b0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
323c0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
323d0 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
323e0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
323f0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
32400 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
32410 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
32420 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
32430 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
32440 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
32450 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
32460 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
32470 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
32480 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
32490 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
324a0 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
324b0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
324c0 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
324d0 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In1) ) goto no_m
324e0 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
324f0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
32500 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  IsRowSet(pIn1) )
32510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
32520 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
32530 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
32540 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
32550 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
32560 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
32570 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
32580 73 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31  st((RowSet*)pIn1
32590 2d 3e 7a 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  ->z, iSet, pIn3-
325a0 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
325b0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
325c0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
325d0 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
325e0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
325f0 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
32600 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
32610 74 49 6e 73 65 72 74 28 28 52 6f 77 53 65 74 2a  tInsert((RowSet*
32620 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 33 2d 3e  )pIn1->z, pIn3->
32630 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
32640 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
32650 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
32660 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
32670 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
32680 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
32690 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
326a0 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
326b0 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
326c0 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
326d0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
326e0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
326f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
32700 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
32710 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
32720 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
32730 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
32740 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
32750 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
32760 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
32770 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
32780 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
32790 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
327a0 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
327b0 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
327c0 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
327d0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
327e0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
327f0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
32800 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
32810 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
32820 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
32830 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
32840 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
32850 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
32860 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
32870 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
32880 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
32890 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
328a0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
328b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
328c0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
328d0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
328e0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
328f0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
32900 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
32910 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
32920 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
32930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
32940 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
32950 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
32960 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
32970 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
32980 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
32990 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
329a0 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
329b0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
329c0 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
329d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
329e0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
329f0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
32a00 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
32a10 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
32a20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
32a30 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
32a40 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
32a60 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
32a70 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
32a80 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
32a90 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
32aa0 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
32ab0 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
32ac0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
32ad0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
32ae0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
32af0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
32b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32b10 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
32b20 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
32b30 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
32b40 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
32b50 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
32b60 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
32b70 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
32b80 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
32b90 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
32ba0 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
32bb0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
32bc0 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
32bd0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
32be0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
32bf0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
32c00 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
32c10 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
32c20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
32c30 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
32c40 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
32c50 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
32c60 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
32c70 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
32c80 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
32c90 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
32ca0 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
32cb0 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
32cc0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
32cd0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
32ce0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
32cf0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
32d00 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
32d10 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
32d20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
32d30 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
32d40 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
32d50 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
32d60 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
32d70 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
32d80 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
32d90 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
32da0 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
32db0 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
32dc0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
32dd0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
32de0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
32df0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
32e00 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
32e10 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
32e20 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
32e30 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
32e40 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
32e50 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
32e60 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
32e70 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
32e80 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
32e90 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
32ea0 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
32eb0 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
32ec0 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
32ed0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
32ee0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
32ef0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
32f00 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
32f10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
32f20 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e  rror(p, "too man
32f30 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
32f40 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
32f50 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
32f60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
32f70 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
32f80 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
32f90 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
32fa0 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
32fb0 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
32fc0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
32fd0 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
32fe0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
32ff0 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
33000 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
33010 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
33020 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
33030 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
33040 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
33050 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
33060 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
33070 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
33080 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
33090 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
330a0 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d  flags&MEM_Blob)=
330b0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62  =0 ){.    /* Sub
330c0 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20  Program.nMem is 
330d0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
330e0 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  r of memory cell
330f0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  s used by the . 
33100 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74     ** program st
33110 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72  ored in SubProgr
33120 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20  am.aOp. As well 
33130 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65  as these, one me
33140 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c  mory.    ** cell
33150 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
33160 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65   each cursor use
33170 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
33180 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20  . Set local.    
33190 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d  ** variable nMem
331a0 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62   (and later, Vdb
331b0 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d  eFrame.nChildMem
331c0 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e  ) to this value.
331d0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d  .    */.    nMem
331e0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65   = pProgram->nMe
331f0 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  m + pProgram->nC
33200 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  sr;.    assert( 
33210 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66  nMem>0 );.    if
33220 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
33230 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20  ==0 ) nMem++;.  
33240 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
33250 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
33260 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
33270 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
33280 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
33290 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
332a0 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
332b0 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20 20  dbeCursor*).    
332c0 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50 72            + (pPr
332d0 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f  ogram->nOp + 7)/
332e0 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  8;.    pFrame = 
332f0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
33300 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
33310 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
33320 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
33330 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
33340 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
33350 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
33360 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
33370 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 3b 0a 20  _Blob|MEM_Dyn;. 
33380 20 20 20 70 52 74 2d 3e 7a 20 3d 20 28 63 68 61     pRt->z = (cha
33390 72 2a 29 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  r*)pFrame;.    p
333a0 52 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20  Rt->n = nByte;. 
333b0 20 20 20 70 52 74 2d 3e 78 44 65 6c 20 3d 20 73     pRt->xDel = s
333c0 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 4d  qlite3VdbeFrameM
333d0 65 6d 44 65 6c 3b 0a 0a 20 20 20 20 70 46 72 61  emDel;..    pFra
333e0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
333f0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
33400 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
33410 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
33420 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
33430 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
33440 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
33450 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  p);.    pFrame->
33460 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
33470 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
33480 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
33490 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
334a0 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
334b0 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
334c0 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
334d0 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
334e0 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
334f0 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
33500 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
33510 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
33520 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ken;.#ifdef SQLI
33530 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
33540 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46  CANSTATUS.    pF
33550 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70  rame->anExec = p
33560 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66  ->anExec;.#endif
33570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
33580 45 42 55 47 0a 20 20 20 20 70 46 72 61 6d 65 2d  EBUG.    pFrame-
33590 3e 69 46 72 61 6d 65 4d 61 67 69 63 20 3d 20 53  >iFrameMagic = S
335a0 51 4c 49 54 45 5f 46 52 41 4d 45 5f 4d 41 47 49  QLITE_FRAME_MAGI
335b0 43 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  C;.#endif..    p
335c0 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
335d0 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
335e0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
335f0 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
33600 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
33610 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
33620 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
33630 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
33640 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
33650 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
33660 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
33670 20 20 20 70 46 72 61 6d 65 20 3d 20 28 56 64 62     pFrame = (Vdb
33680 65 46 72 61 6d 65 2a 29 70 52 74 2d 3e 7a 3b 0a  eFrame*)pRt->z;.
33690 20 20 20 20 61 73 73 65 72 74 28 20 70 52 74 2d      assert( pRt-
336a0 3e 78 44 65 6c 3d 3d 73 71 6c 69 74 65 33 56 64  >xDel==sqlite3Vd
336b0 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 20 29 3b  beFrameMemDel );
336c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
336d0 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f  ogram->nMem+pPro
336e0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
336f0 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20  me->nChildMem . 
33700 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67         || (pProg
33710 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20  ram->nCsr==0 && 
33720 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31  pProgram->nMem+1
33730 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
33740 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Mem) );.    asse
33750 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
33760 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
33770 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
33780 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d  ert( (int)(pOp -
33790 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70   aOp)==pFrame->p
337a0 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
337b0 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
337c0 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
337d0 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
337e0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  ->lastRowid = db
337f0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
33800 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
33810 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
33820 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65  Frame->nDbChange
33830 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67   = p->db->nChang
33840 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46 72  e;.  assert( pFr
33850 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30  ame->pAuxData==0
33860 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41   );.  pFrame->pA
33870 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78  uxData = p->pAux
33880 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44  Data;.  p->pAuxD
33890 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43  ata = 0;.  p->nC
338a0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
338b0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
338c0 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
338d0 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d  m = VdbeFrameMem
338e0 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e  (pFrame);.  p->n
338f0 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
33900 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
33910 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
33920 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
33930 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
33940 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
33950 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46  m[p->nMem];.  pF
33960 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75  rame->aOnce = (u
33970 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50 72  8*)&p->apCsr[pPr
33980 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20  ogram->nCsr];.  
33990 6d 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e 61  memset(pFrame->a
339a0 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67 72  Once, 0, (pProgr
339b0 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b  am->nOp + 7)/8);
339c0 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
339d0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
339e0 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
339f0 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65  gram->nOp;.#ifde
33a00 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
33a10 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
33a20 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b    p->anExec = 0;
33a30 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20  .#endif.  pOp = 
33a40 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65  &aOp[-1];..  bre
33a50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
33a60 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
33a70 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
33a80 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
33a90 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
33aa0 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
33ab0 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
33ac0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
33ad0 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
33ae0 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
33af0 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
33b00 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
33b10 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
33b20 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
33b30 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
33b40 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
33b50 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
33b60 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
33b70 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
33b80 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
33b90 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
33ba0 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
33bb0 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
33bc0 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
33bd0 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
33be0 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
33bf0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
33c00 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
33c10 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
33c20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
33c30 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
33c40 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
33c50 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
33c60 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
33c70 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
33c80 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
33c90 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
33ca0 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  In;.  pOut = out
33cb0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
33cc0 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  Op);.  pFrame = 
33cd0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
33ce0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
33cf0 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
33d00 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
33d10 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
33d20 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
33d30 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
33d40 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
33d50 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
33d60 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
33d70 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
33d80 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
33d90 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
33da0 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
33db0 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
33dc0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
33dd0 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a  : fkctr[P1]+=P2.
33de0 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
33df0 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
33e00 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
33e10 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
33e20 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
33e30 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
33e40 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
33e50 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
33e60 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
33e70 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
33e80 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
33e90 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
33ea0 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
33eb0 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
33ec0 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
33ed0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
33ee0 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
33ef0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
33f00 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
33f10 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
33f20 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
33f30 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b  LITE_DeferFKs ){
33f40 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
33f50 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70  edImmCons += pOp
33f60 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ->p2;.  }else if
33f70 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
33f80 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
33f90 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
33fa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
33fb0 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
33fc0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
33fd0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
33fe0 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
33ff0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
34000 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50  psis: if fkctr[P
34010 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
34020 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
34030 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
34040 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
34050 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
34060 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
34070 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
34080 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
34090 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
340a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
340b0 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
340c0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
340d0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
340e0 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
340f0 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
34100 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
34110 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
34120 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
34130 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
34140 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
34150 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
34160 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
34170 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
34180 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
34190 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
341a0 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
341b0 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
341c0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
341d0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
341e0 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
341f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
34200 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
34210 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  1 ){.    VdbeBra
34220 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65  nchTaken(db->nDe
34230 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
34240 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
34250 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
34260 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
34270 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
34280 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
34290 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
342a0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
342b0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
342c0 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73  Taken(p->nFkCons
342d0 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
342e0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
342f0 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
34300 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  ( p->nFkConstrai
34310 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
34320 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
34330 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
34340 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
34350 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
34360 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34370 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a  _FOREIGN_KEY */.
34380 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34390 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
343a0 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65  NT./* Opcode: Me
343b0 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  mMax P1 P2 * * *
343c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
343d0 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b  P1]=max(r[P1],r[
343e0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P2]).**.** P1 is
343f0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
34400 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
34410 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f   this VM (the ro
34420 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64  ot frame is.** d
34430 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
34440 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20  e current frame 
34450 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  if this instruct
34460 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65  ion is being exe
34470 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20  cuted.** within 
34480 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20  a sub-program). 
34490 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Set the value of
344a0 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
344b0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a  the maximum of .
344c0 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  ** its current v
344d0 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c  alue and the val
344e0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
344f0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
34500 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73  struction throws
34510 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
34520 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
34530 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a  not initially.**
34540 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
34550 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20  case OP_MemMax: 
34560 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
34570 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
34580 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
34590 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
345a0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
345b0 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
345c0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
345d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
345e0 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
345f0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
34600 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
34610 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
34620 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  >p1];.  }.  asse
34630 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
34640 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  In1) );.  sqlite
34650 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
34660 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  fy(pIn1);.  pIn2
34670 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
34680 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
34690 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
346a0 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
346b0 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
346c0 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
346d0 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
346e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
346f0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
34700 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
34710 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
34720 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Pos P1 P2 P3 * *
34730 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
34740 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
34750 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32  P1]-=P3, goto P2
34760 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
34770 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
34780 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49  an integer..** I
34790 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
347a0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
347b0 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75 62 74  or greater, subt
347c0 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
347d0 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20  .** value in P1 
347e0 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  and jump to P2..
347f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69  **.** If the ini
34800 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65  tial value of re
34810 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
34820 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74  s than 1, then t
34830 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75  he.** value is u
34840 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e  nchanged and con
34850 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f  trol passes thro
34860 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
34870 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
34880 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
34890 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
348a0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
348b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
348c0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
348d0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
348e0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
348f0 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30  ken( pIn1->u.i>0
34900 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
34910 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70  ->u.i>0 ){.    p
34920 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d  In1->u.i -= pOp-
34930 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  >p3;.    goto ju
34940 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
34950 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
34960 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74  ode: OffsetLimit
34970 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
34980 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
34990 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d  P1]>0 then r[P2]
349a0 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50  =r[P1]+max(0,r[P
349b0 33 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28  3]) else r[P2]=(
349c0 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  -1).**.** This o
349d0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61  pcode performs a
349e0 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63   commonly used c
349f0 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63  omputation assoc
34a00 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49  iated with.** LI
34a10 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70  MIT and OFFSET p
34a20 72 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68  rocess.  r[P1] h
34a30 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63  olds the limit c
34a40 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a  ounter.  r[P3].*
34a50 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73  * holds the offs
34a60 65 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65  et counter.  The
34a70 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73   opcode computes
34a80 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61   the combined va
34a90 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49  lue.** of the LI
34aa0 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61  MIT and OFFSET a
34ab0 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 76  nd stores that v
34ac0 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20  alue in r[P2].  
34ad0 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c  The r[P2].** val
34ae0 75 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74  ue computed is t
34af0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
34b00 6f 66 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c  of rows that wil
34b10 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20  l need to be.** 
34b20 76 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72  visited in order
34b30 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65   to complete the
34b40 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66   query..**.** If
34b50 20 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P3] is zero o
34b60 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
34b70 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
34b80 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64  no OFFSET.** and
34b90 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
34ba0 20 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66   be the value of
34bb0 20 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31   the LIMIT, r[P1
34bc0 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31  ]..**.** if r[P1
34bd0 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67  ] is zero or neg
34be0 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e  ative, that mean
34bf0 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  s there is no LI
34c00 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  MIT.** and r[P2]
34c10 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a   is set to -1. .
34c20 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  **.** Otherwise,
34c30 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
34c40 20 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31   the sum of r[P1
34c50 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a  ] and r[P3]..*/.
34c60 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69  case OP_OffsetLi
34c70 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31  mit: {    /* in1
34c80 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20  , out2, in3 */. 
34c90 20 69 36 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d   i64 x;.  pIn1 =
34ca0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
34cb0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
34cc0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74  pOp->p3];.  pOut
34cd0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
34ce0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
34cf0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
34d00 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
34d10 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
34d20 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
34d30 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69  .  x = pIn1->u.i
34d40 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20  ;.  if( x<=0 || 
34d50 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
34d60 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f  &x, pIn3->u.i>0?
34d70 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a  pIn3->u.i:0) ){.
34d80 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 4c 49      /* If the LI
34d90 4d 49 54 20 69 73 20 6c 65 73 73 20 74 68 61 6e  MIT is less than
34da0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72   or equal to zer
34db0 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e  o, loop forever.
34dc0 20 20 54 68 69 73 0a 20 20 20 20 2a 2a 20 69 73    This.    ** is
34dd0 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42 75   documented.  Bu
34de0 74 20 61 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c  t also, if the L
34df0 49 4d 49 54 2b 4f 46 46 53 45 54 20 65 78 63 65  IMIT+OFFSET exce
34e00 65 64 73 20 32 5e 36 33 20 74 68 65 6e 0a 20 20  eds 2^63 then.  
34e10 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66    ** also loop f
34e20 6f 72 65 76 65 72 2e 20 20 54 68 69 73 20 69 73  orever.  This is
34e30 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20   undocumented.  
34e40 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75  In fact, one cou
34e50 6c 64 20 61 72 67 75 65 0a 20 20 20 20 2a 2a 20  ld argue.    ** 
34e60 74 68 61 74 20 74 68 65 20 6c 6f 6f 70 20 73 68  that the loop sh
34e70 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e 20  ould terminate. 
34e80 20 42 75 74 20 61 73 73 75 6d 69 6e 67 20 31 20   But assuming 1 
34e90 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f  billion iteratio
34ea0 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72 20 73 65  ns.    ** per se
34eb0 63 6f 6e 64 20 28 66 61 72 20 65 78 63 65 65 64  cond (far exceed
34ec0 69 6e 67 20 74 68 65 20 63 61 70 61 62 69 6c 69  ing the capabili
34ed0 74 69 65 73 20 6f 66 20 61 6e 79 20 63 75 72 72  ties of any curr
34ee0 65 6e 74 20 68 61 72 64 77 61 72 65 29 0a 20 20  ent hardware).  
34ef0 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74 61    ** it would ta
34f00 6b 65 20 6e 65 61 72 6c 79 20 33 30 30 20 79 65  ke nearly 300 ye
34f10 61 72 73 20 74 6f 20 61 63 74 75 61 6c 6c 79 20  ars to actually 
34f20 72 65 61 63 68 20 74 68 65 20 6c 69 6d 69 74 2e  reach the limit.
34f30 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70    So.    ** loop
34f40 69 6e 67 20 66 6f 72 65 76 65 72 20 69 73 20 61  ing forever is a
34f50 20 72 65 61 73 6f 6e 61 62 6c 65 20 61 70 70 72   reasonable appr
34f60 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20  oximation. */.  
34f70 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31    pOut->u.i = -1
34f80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
34f90 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20  Out->u.i = x;.  
34fa0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
34fb0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65   Opcode: IfNotZe
34fc0 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
34fd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
34fe0 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50  [P1]!=0 then r[P
34ff0 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]--, goto P2.**
35000 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
35010 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
35020 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65  integer.  If the
35030 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
35040 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e  ster P1 is.** in
35050 69 74 69 61 6c 6c 79 20 67 72 65 61 74 65 72 20  itially greater 
35060 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
35070 64 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61  decrement the va
35080 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
35090 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 20  P1..** If it is 
350a0 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69  non-zero (negati
350b0 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 20  ve or positive) 
350c0 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75  and then also ju
350d0 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49  mp to P2.  .** I
350e0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
350f0 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c   initially zero,
35100 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e   leave it unchan
35110 67 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  ged and fall thr
35120 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ough..*/.case OP
35130 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20  _IfNotZero: {   
35140 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
35150 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
35160 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
35170 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
35180 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
35190 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
351a0 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29  (pIn1->u.i<0, 2)
351b0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
351c0 69 20 29 7b 0a 20 20 20 20 20 69 66 28 20 70 49  i ){.     if( pI
351d0 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31  n1->u.i>0 ) pIn1
351e0 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f  ->u.i--;.     go
351f0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
35200 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
35210 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75  * Opcode: DecrJu
35220 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  mpZero P1 P2 * *
35230 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
35240 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20  if (--r[P1])==0 
35250 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
35260 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 68  gister P1 must h
35270 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  old an integer. 
35280 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76   Decrement the v
35290 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e  alue in P1.** an
352a0 64 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  d jump to P2 if 
352b0 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73  the new value is
352c0 20 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a   exactly zero..*
352d0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75  /.case OP_DecrJu
352e0 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f  mpZero: {      /
352f0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
35300 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
35310 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
35320 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
35330 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
35340 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53  In1->u.i>SMALLES
35350 54 5f 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e  T_INT64 ) pIn1->
35360 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61  u.i--;.  VdbeBra
35370 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
35380 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
35390 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20   pIn1->u.i==0 ) 
353a0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
353b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
353c0 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
353d0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
353e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
353f0 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
35400 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
35410 63 75 74 65 20 74 68 65 20 78 53 74 65 70 20 66  cute the xStep f
35420 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
35430 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65  ggregate..** The
35440 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
35450 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20   arguments.  P4 
35460 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
35470 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20  the .** FuncDef 
35480 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
35490 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
354a0 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
354b0 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
354c0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
354d0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
354e0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
354f0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
35500 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
35510 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
35520 3a 20 41 67 67 49 6e 76 65 72 73 65 20 2a 20 50  : AggInverse * P
35530 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
35540 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
35550 50 33 5d 20 69 6e 76 65 72 73 65 28 72 5b 50 32  P3] inverse(r[P2
35560 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
35570 75 74 65 20 74 68 65 20 78 49 6e 76 65 72 73 65  ute the xInverse
35580 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
35590 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54   aggregate..** T
355a0 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  he function has 
355b0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50  P5 arguments.  P
355c0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
355d0 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65  o the .** FuncDe
355e0 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  f structure that
355f0 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
35600 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
35610 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20  er P3 is the.** 
35620 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
35630 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
35640 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
35650 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
35660 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
35670 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sors..*/./* Opco
35680 64 65 3a 20 41 67 67 53 74 65 70 31 20 50 31 20  de: AggStep1 P1 
35690 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
356a0 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
356b0 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
356c0 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
356d0 65 20 74 68 65 20 78 53 74 65 70 20 28 69 66 20  e the xStep (if 
356e0 50 31 3d 3d 30 29 20 6f 72 20 78 49 6e 76 65 72  P1==0) or xInver
356f0 73 65 20 28 69 66 20 50 31 21 3d 30 29 20 66 75  se (if P1!=0) fu
35700 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a  nction for an.**
35710 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
35720 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
35730 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20   arguments.  P4 
35740 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
35750 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20  the .** FuncDef 
35760 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
35770 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
35780 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
35790 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
357a0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
357b0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
357c0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
357d0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
357e0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
357f0 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  rs..**.** This o
35800 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c  pcode is initial
35810 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41  ly coded as OP_A
35820 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72  ggStep0.  On fir
35830 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a  st evaluation,.*
35840 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  * the FuncDef st
35850 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f  ored in P4 is co
35860 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
35870 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
35880 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64  and.** the opcod
35890 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49  e is changed.  I
358a0 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20  n this way, the 
358b0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f  initialization o
358c0 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
358d0 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61  _context only ha
358e0 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74  ppens once, inst
358f0 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63  ead of on each c
35900 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74  all to the.** st
35910 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ep function..*/.
35920 63 61 73 65 20 4f 50 5f 41 67 67 49 6e 76 65 72  case OP_AggInver
35930 73 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  se:.case OP_AggS
35940 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  tep: {.  int n;.
35950 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
35960 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
35970 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
35980 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
35990 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
359a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
359b0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
359c0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
359d0 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
359e0 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
359f0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
35a00 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
35a10 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
35a20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
35a30 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
35a40 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
35a50 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
35a60 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
35a70 61 77 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f  awNN(db, n*sizeo
35a80 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  f(sqlite3_value*
35a90 29 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) +.            
35aa0 20 20 20 28 73 69 7a 65 6f 66 28 70 43 74 78 5b     (sizeof(pCtx[
35ab0 30 5d 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  0]) + sizeof(Mem
35ac0 29 20 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69 74  ) - sizeof(sqlit
35ad0 65 33 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20  e3_value*)));.  
35ae0 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
35af0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
35b00 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70  x->pMem = 0;.  p
35b10 43 74 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d  Ctx->pOut = (Mem
35b20 2a 29 26 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e  *)&(pCtx->argv[n
35b30 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ]);.  sqlite3Vdb
35b40 65 4d 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70  eMemInit(pCtx->p
35b50 4f 75 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c  Out, db, MEM_Nul
35b60 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e  l);.  pCtx->pFun
35b70 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
35b80 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
35b90 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
35ba0 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
35bb0 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b   = p;.  pCtx->sk
35bc0 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43  ipFlag = 0;.  pC
35bd0 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b  tx->isError = 0;
35be0 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
35bf0 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
35c00 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
35c10 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
35c20 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f 41  pCtx;..  /* OP_A
35c30 67 67 49 6e 76 65 72 73 65 20 6d 75 73 74 20 68  ggInverse must h
35c40 61 76 65 20 50 31 3d 3d 31 20 61 6e 64 20 4f 50  ave P1==1 and OP
35c50 5f 41 67 67 53 74 65 70 20 6d 75 73 74 20 68 61  _AggStep must ha
35c60 76 65 20 50 31 3d 3d 30 20 2a 2f 0a 20 20 61 73  ve P1==0 */.  as
35c70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3d 3d 28  sert( pOp->p1==(
35c80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
35c90 41 67 67 49 6e 76 65 72 73 65 29 20 29 3b 0a 0a  AggInverse) );..
35ca0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
35cb0 4f 50 5f 41 67 67 53 74 65 70 31 3b 0a 20 20 2f  OP_AggStep1;.  /
35cc0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
35cd0 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a  nto OP_AggStep *
35ce0 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  /.}.case OP_AggS
35cf0 74 65 70 31 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  tep1: {.  int i;
35d00 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
35d10 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20  xt *pCtx;.  Mem 
35d20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74  *pMem;..  assert
35d30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
35d40 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70  4_FUNCCTX );.  p
35d50 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43  Ctx = pOp->p4.pC
35d60 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d  tx;.  pMem = &aM
35d70 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23 69  em[pOp->p3];..#i
35d80 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
35d90 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  G.  if( pOp->p1 
35da0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  ){.    /* This i
35db0 73 20 61 6e 20 4f 50 5f 41 67 67 49 6e 76 65 72  s an OP_AggInver
35dc0 73 65 20 63 61 6c 6c 2e 20 20 56 65 72 69 66 79  se call.  Verify
35dd0 20 74 68 61 74 20 78 53 74 65 70 20 68 61 73 20   that xStep has 
35de0 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 62 65  always.    ** be
35df0 65 6e 20 63 61 6c 6c 65 64 20 61 74 20 6c 65 61  en called at lea
35e00 73 74 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f  st once prior to
35e10 20 61 6e 79 20 78 49 6e 76 65 72 73 65 20 63 61   any xInverse ca
35e20 6c 6c 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ll. */.    asser
35e30 74 28 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d 3d  t( pMem->uTemp==
35e40 30 78 31 31 32 32 65 30 65 33 20 29 3b 0a 20 20  0x1122e0e3 );.  
35e50 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
35e60 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 53  is is an OP_AggS
35e70 74 65 70 20 63 61 6c 6c 2e 20 20 4d 61 72 6b 20  tep call.  Mark 
35e80 69 74 20 61 73 20 73 75 63 68 2e 20 2a 2f 0a 20  it as such. */. 
35e90 20 20 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 20 3d     pMem->uTemp =
35ea0 20 30 78 31 31 32 32 65 30 65 33 3b 0a 20 20 7d   0x1122e0e3;.  }
35eb0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
35ec0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
35ed0 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
35ee0 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
35ef0 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
35f00 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
35f10 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
35f20 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
35f30 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
35f40 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
35f50 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
35f60 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
35f70 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
35f80 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
35f90 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
35fa0 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
35fb0 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
35fc0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
35fd0 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70  bject */.  if( p
35fe0 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65  Ctx->pMem != pMe
35ff0 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  m ){.    pCtx->p
36000 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20  Mem = pMem;.    
36010 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
36020 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
36030 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
36040 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
36050 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
36060 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
36070 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67  i=0; i<pCtx->arg
36080 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  c; i++){.    ass
36090 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
360a0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29  pCtx->argv[i]) )
360b0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
360c0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
360d0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a  pCtx->argv[i]);.
360e0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d    }.#endif..  pM
360f0 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  em->n++;.  asser
36100 74 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66  t( pCtx->pOut->f
36110 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
36120 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  ;.  assert( pCtx
36130 2d 3e 69 73 45 72 72 6f 72 3d 3d 30 20 29 3b 0a  ->isError==0 );.
36140 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
36150 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 23  skipFlag==0 );.#
36160 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
36170 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20  IT_WINDOWFUNC.  
36180 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
36190 20 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d     (pCtx->pFunc-
361a0 3e 78 49 6e 76 65 72 73 65 29 28 70 43 74 78 2c  >xInverse)(pCtx,
361b0 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d  pCtx->argc,pCtx-
361c0 3e 61 72 67 76 29 3b 0a 20 20 7d 65 6c 73 65 0a  >argv);.  }else.
361d0 23 65 6e 64 69 66 0a 20 20 28 70 43 74 78 2d 3e  #endif.  (pCtx->
361e0 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70  pFunc->xSFunc)(p
361f0 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70  Ctx,pCtx->argc,p
36200 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49  Ctx->argv); /* I
36210 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
36220 30 20 2a 2f 0a 0a 20 20 69 66 28 20 70 43 74 78  0 */..  if( pCtx
36230 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
36240 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
36250 6f 72 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  or>0 ){.      sq
36260 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
36270 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
36280 76 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d  value_text(pCtx-
36290 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72  >pOut));.      r
362a0 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  c = pCtx->isErro
362b0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
362c0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
362d0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
362e0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
362f0 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
36300 20 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d       i = pOp[-1]
36310 2e 70 31 3b 0a 20 20 20 20 20 20 69 66 28 20 69  .p1;.      if( i
36320 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
36330 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
36340 69 5d 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 43  i], 1);.      pC
36350 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30  tx->skipFlag = 0
36360 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
36370 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
36380 65 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20  e(pCtx->pOut);. 
36390 20 20 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66     pCtx->pOut->f
363a0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
363b0 0a 20 20 20 20 70 43 74 78 2d 3e 69 73 45 72 72  .    pCtx->isErr
363c0 6f 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  or = 0;.    if( 
363d0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
363e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
363f0 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  }.  assert( pCtx
36400 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d  ->pOut->flags==M
36410 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73  EM_Null );.  ass
36420 65 72 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46  ert( pCtx->skipF
36430 6c 61 67 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61  lag==0 );.  brea
36440 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
36450 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
36460 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
36470 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20  is: accum=r[P1] 
36480 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  N=P2.**.** P1 is
36490 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
364a0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  tion that is the
364b0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72   accumulator for
364c0 20 61 6e 20 61 67 67 72 65 67 61 74 65 0a 2a 2a   an aggregate.**
364d0 20 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63 74   or window funct
364e0 69 6f 6e 2e 20 20 45 78 65 63 75 74 65 20 74 68  ion.  Execute th
364f0 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63  e finalizer func
36500 74 69 6f 6e 20 0a 2a 2a 20 66 6f 72 20 61 6e 20  tion .** for an 
36510 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 73 74  aggregate and st
36520 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
36530 6e 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  n P1..**.** P2 i
36540 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
36550 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
36560 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
36570 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
36580 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
36590 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
365a0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
365b0 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
365c0 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
365d0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
365e0 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
365f0 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
36600 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
36610 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
36620 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
36630 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
36640 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
36650 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
36660 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
36670 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
36680 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
36690 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
366a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .*/./* Opcode: A
366b0 67 67 56 61 6c 75 65 20 2a 20 50 32 20 50 33 20  ggValue * P2 P3 
366c0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
366d0 3a 20 72 5b 50 33 5d 3d 76 61 6c 75 65 20 4e 3d  : r[P3]=value N=
366e0 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  P2.**.** Invoke 
366f0 74 68 65 20 78 56 61 6c 75 65 28 29 20 66 75 6e  the xValue() fun
36700 63 74 69 6f 6e 20 61 6e 64 20 73 74 6f 72 65 20  ction and store 
36710 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
36720 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
36730 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
36740 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
36750 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
36760 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
36770 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
36780 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
36790 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
367a0 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
367b0 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
367c0 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
367d0 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
367e0 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
367f0 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
36800 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
36810 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
36820 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
36830 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
36840 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
36850 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
36860 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
36870 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
36880 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
36890 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lled..*/.case OP
368a0 5f 41 67 67 56 61 6c 75 65 3a 0a 63 61 73 65 20  _AggValue:.case 
368b0 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20  OP_AggFinal: {. 
368c0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73   Mem *pMem;.  as
368d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
368e0 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
368f0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
36900 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
36910 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20  ( pOp->p3==0 || 
36920 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
36930 41 67 67 56 61 6c 75 65 20 29 3b 0a 20 20 70 4d  AggValue );.  pM
36940 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
36950 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
36960 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
36970 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
36980 29 29 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  ))==0 );.#ifndef
36990 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e   SQLITE_OMIT_WIN
369a0 44 4f 57 46 55 4e 43 0a 20 20 69 66 28 20 70 4f  DOWFUNC.  if( pO
369b0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 72 63 20  p->p3 ){.    rc 
369c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
369d0 41 67 67 56 61 6c 75 65 28 70 4d 65 6d 2c 20 26  AggValue(pMem, &
369e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 70  aMem[pOp->p3], p
369f0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
36a00 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
36a10 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 7d 65 6c 73  pOp->p3];.  }els
36a20 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20  e.#endif.  {.   
36a30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
36a40 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
36a50 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
36a60 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 69 66 28 20  );.  }.  .  if( 
36a70 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
36a80 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
36a90 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
36aa0 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
36ab0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
36ac0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
36ad0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
36ae0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
36af0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
36b00 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
36b10 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
36b20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
36b30 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
36b40 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
36b50 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
36b60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36b70 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
36b80 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
36b90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
36ba0 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
36bb0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
36bc0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
36bd0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
36be0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
36bf0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
36c00 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
36c10 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
36c20 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
36c30 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
36c40 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
36c50 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
36c60 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
36c70 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
36c80 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
36c90 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
36ca0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
36cb0 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
36cc0 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
36cd0 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
36ce0 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
36cf0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
36d00 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
36d10 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
36d20 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
36d30 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
36d40 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
36d50 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
36d60 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
36d70 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
36d80 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
36d90 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
36da0 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
36db0 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
36dc0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36de0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
36df0 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
36e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e10 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
36e20 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
36e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e40 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
36e50 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
36e60 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
36e70 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
36e80 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
36e90 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
36ea0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
36eb0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
36ec0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
36ed0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
36ee0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
36ef0 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
36f00 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
36f10 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
36f20 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
36f30 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
36f40 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
36f50 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
36f60 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
36f70 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
36f80 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
36f90 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
36fa0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
36fb0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc!=SQLITE_BUS
36fc0 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  Y ) goto abort_d
36fd0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
36fe0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
36ff0 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
37000 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
37010 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
37020 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
37030 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
37040 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
37050 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
37060 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
37070 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
37080 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
37090 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
370a0 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
370b0 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
370c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
370d0 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
370e0 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
370f0 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
37100 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
37110 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
37120 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
37130 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
37140 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
37150 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
37160 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
37170 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
37180 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
37190 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
371a0 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
371b0 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
371c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
371d0 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
371e0 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
371f0 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
37200 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
37210 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
37220 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
37230 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
37240 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
37250 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
37260 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
37270 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a  {    /* out2 */.
37280 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
37290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372a0 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
372b0 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
372c0 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
372d0 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
372e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
372f0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
37300 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
37310 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
37320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
37330 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
37340 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
37350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37360 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
37370 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
37380 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
37390 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
373a0 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
373b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
373c0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
373d0 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
373e0 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20  .#endif..  pOut 
373f0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
37400 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77  (p, pOp);.  eNew
37410 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
37420 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
37430 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
37440 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
37450 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
37460 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
37470 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
37480 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37490 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
374a0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
374b0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
374c0 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
374d0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
374e0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
374f0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
37500 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
37510 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
37520 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37530 4f 44 45 5f 57 41 4c 32 0a 20 20 20 20 20 20 20  ODE_WAL2.       
37540 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
37550 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
37560 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
37570 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
37580 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
37590 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
375a0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
375b0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
375c0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50  p->p1].pBt;.  pP
375d0 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
375e0 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20  reePager(pBt);. 
375f0 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50   eOld = sqlite3P
37600 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerGetJournalMo
37610 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66  de(pPager);.  if
37620 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
37630 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
37640 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
37650 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67   if( !sqlite3Pag
37660 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72  erOkToChangeJour
37670 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20  nalMode(pPager) 
37680 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a  ) eNew = eOld;..
37690 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
376a0 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e  MIT_WAL.  zFilen
376b0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ame = sqlite3Pag
376c0 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65  erFilename(pPage
376d0 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20  r, 1);..  /* Do 
376e0 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e  not allow a tran
376f0 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61  sition to journa
37700 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61  l_mode=WAL for a
37710 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
37720 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72  n temporary stor
37730 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46  age or if the VF
37740 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  S does not suppo
37750 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  rt shared memory
37760 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 73 57   .  */.  if( isW
37770 61 6c 4d 6f 64 65 28 65 4e 65 77 29 0a 20 20 20  alMode(eNew).   
37780 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
37790 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
377a0 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
377b0 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
377c0 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
377d0 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
377e0 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
377f0 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
37800 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
37810 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
37820 20 20 7d 0a 0a 20 20 69 66 28 20 65 4e 65 77 21    }..  if( eNew!
37830 3d 65 4f 6c 64 20 26 26 20 28 69 73 57 61 6c 4d  =eOld && (isWalM
37840 6f 64 65 28 65 4e 65 77 29 20 7c 7c 20 69 73 57  ode(eNew) || isW
37850 61 6c 4d 6f 64 65 28 65 4f 6c 64 29 29 20 29 7b  alMode(eOld)) ){
37860 0a 0a 20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74  ..    /* Prevent
37870 20 63 68 61 6e 67 69 6e 67 20 64 69 72 65 63 74   changing direct
37880 6c 79 20 74 6f 20 77 61 6c 32 20 66 72 6f 6d 20  ly to wal2 from 
37890 77 61 6c 20 6d 6f 64 65 2e 20 41 6e 64 20 76 69  wal mode. And vi
378a0 63 65 20 76 65 72 73 61 2e 20 2a 2f 0a 20 20 20  ce versa. */.   
378b0 20 69 66 28 20 69 73 57 61 6c 4d 6f 64 65 28 65   if( isWalMode(e
378c0 4e 65 77 29 20 26 26 20 69 73 57 61 6c 4d 6f 64  New) && isWalMod
378d0 65 28 65 4f 6c 64 29 20 29 7b 0a 20 20 20 20 20  e(eOld) ){.     
378e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
378f0 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  OR;.      sqlite
37900 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
37910 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 66 72 6f  annot change fro
37920 6d 20 25 73 20 74 6f 20 25 73 20 6d 6f 64 65 22  m %s to %s mode"
37930 2c 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ,.          sqli
37940 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
37950 6d 65 28 65 4f 6c 64 29 2c 20 73 71 6c 69 74 65  me(eOld), sqlite
37960 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
37970 28 65 4e 65 77 29 0a 20 20 20 20 20 20 29 3b 0a  (eNew).      );.
37980 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
37990 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
379a0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 50 72 65     }..    /* Pre
379b0 76 65 6e 74 20 73 77 69 74 63 68 69 6e 67 20 69  vent switching i
379c0 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 77 61  nto or out of wa
379d0 6c 2f 77 61 6c 32 20 6d 6f 64 65 20 6d 69 64 2d  l/wal2 mode mid-
379e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 20  transaction */. 
379f0 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f     if( !db->auto
37a00 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56  Commit || db->nV
37a10 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20  dbeRead>1 ){.   
37a20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
37a30 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69  RROR;.      sqli
37a40 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a  te3VdbeError(p,.
37a50 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
37a60 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
37a70 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
37a80 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
37a90 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
37aa0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37ab0 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
37ac0 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
37ad0 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f     );.      goto
37ae0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
37af0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 0a 20 20 20  ror;.    }. .   
37b00 20 69 66 28 20 69 73 57 61 6c 4d 6f 64 65 28 65   if( isWalMode(e
37b10 4f 6c 64 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a  Old) ){.      /*
37b20 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20   If leaving WAL 
37b30 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20  mode, close the 
37b40 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63  log file. If suc
37b50 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c  cessful, the cal
37b60 6c 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61  l.      ** to Pa
37b70 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
37b80 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
37b90 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
37ba0 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
37bb0 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
37bc0 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
37bd0 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
37be0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
37bf0 6c 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 66 74  le .      ** aft
37c00 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  er a successful 
37c10 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 2a  return. .      *
37c20 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  /.      rc = sql
37c30 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
37c40 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20  l(pPager, db);. 
37c50 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
37c60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
37c70 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
37c80 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
37c90 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20  ger, eNew);.    
37ca0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
37cb0 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
37cc0 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
37cd0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6e   ){.      /* Can
37ce0 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
37cf0 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
37d00 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
37d10 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
37d20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
37d30 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 73  diate */.      s
37d40 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
37d50 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
37d60 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
37d70 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 7d 0a  ODE_OFF);.    }.
37d80 0a 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74  .    /* Open a t
37d90 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
37da0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
37db0 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74   Regardless of t
37dc0 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 2a  he journal.    *
37dd0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
37de0 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
37df0 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
37e00 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 2a 2f 0a  journal..    */.
37e10 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
37e20 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
37e30 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
37e40 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
37e50 4f 4b 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 31  OK ){.      /* 1
37e60 3d 3d 72 6f 6c 6c 62 61 63 6b 2c 20 32 3d 3d 77  ==rollback, 2==w
37e70 61 6c 2c 20 33 3d 3d 77 61 6c 32 20 2a 2f 0a 20  al, 3==wal2 */. 
37e80 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
37e90 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e  3BtreeSetVersion
37ea0 28 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  (pBt, .         
37eb0 20 31 20 2b 20 69 73 57 61 6c 4d 6f 64 65 28 65   1 + isWalMode(e
37ec0 4e 65 77 29 20 2b 20 28 65 4e 65 77 3d 3d 50 41  New) + (eNew==PA
37ed0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37ee0 57 41 4c 32 29 0a 20 20 20 20 20 20 29 3b 0a 20  WAL2).      );. 
37ef0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
37f00 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
37f10 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
37f20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20  if( rc ) eNew = 
37f30 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73  eOld;.  eNew = s
37f40 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
37f50 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
37f60 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74  , eNew);..  pOut
37f70 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
37f80 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
37f90 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
37fa0 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
37fb0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
37fc0 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
37fd0 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
37fe0 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
37ff0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
38000 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
38010 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
38020 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
38030 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20  ding);.  if( rc 
38040 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
38050 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
38060 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
38070 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
38080 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
38090 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
380a0 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
380b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
380c0 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
380d0 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20  de: Vacuum P1 * 
380e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
380f0 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
38100 74 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69  tabase P1.  P1 i
38110 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20  s 0 for "main", 
38120 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a  and 2 or more.**
38130 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64   for an attached
38140 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
38150 22 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20  "temp" database 
38160 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75  may not be vacuu
38170 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  med..*/.case OP_
38180 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65  Vacuum: {.  asse
38190 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
381a0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
381b0 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70  ite3RunVacuum(&p
381c0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70  ->zErrMsg, db, p
381d0 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72  Op->p1);.  if( r
381e0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
381f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
38200 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
38210 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
38220 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
38230 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
38240 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
38250 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
38260 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
38270 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
38280 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
38290 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
382a0 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
382b0 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
382c0 66 69 6e 69 7